数据库
首页 > 数据库> > MySQL(笔记--自学1)

MySQL(笔记--自学1)

作者:互联网

left join

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

 SELECT *column_name(s)*

FROM *table1*

LEFT JOIN *table2*

ON *table1.column_name*=*table2.column_name*;

Right join

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

 SELECT *column_name(s)*//列名子

FROM *table1*//表

RIGHT JOIN *table2*//连表匹配

ON *table1.column_name*=*table2.column_name*;//匹配条件。

FULL OUTER JOIN

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

SELECT *column_name(s)*

FROM *table1*

FULL OUTER JOIN *table2*

ON *table1.column_name*=*table2.column_name*;

Inner join

INNER JOIN 关键字在表中存在至少一个匹配时返回行。

 SELECT *column_name(s)*

FROM *table1*

INNER JOIN *table2*

ON *table1.column_name*=*table2.column_name*;

Cast

CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

语法:CAST (expression AS data_type)

AVG

AVG() 函数返回数值列的平均值。

语法:SELECT AVG(column_name) FROM table_name

Sum

SUM() 函数返回数值列的总数。

语法:SELECT SUM(column_name) FROM table_name;

Nvl

如果 "某个元素值" 是 NULL,则不会影响计算,因为如果值是 NULL 则 ISNULL() 返回 0:

Round

ROUND() 函数用于把数值字段舍入为指定的小数位数。

SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

参数描述
column_name必需。要舍入的字段。
decimals可选。规定要返回的小数位数。

As

as可以为表名称或列名称指定别名。

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。

列的 SQL 别名语法

SELECT column_name AS alias_name
FROM table_name;

表的 SQL 别名语法

SELECT column_name(s)
FROM table_name AS alias_name;

like

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

SELECT *column_name(s)*
FROM *table_name*
WHERE *column_name* LIKE *pattern*;

Case when

场景1:**有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀**

SELECT
    STUDENT_NAME,
    (CASE WHEN score < 60 THEN '不及格'
        WHEN score >= 60 AND score < 80 THEN '及格'
        WHEN score >= 80 THEN '优秀'
        ELSE '异常' END) AS REMARK
FROM
    TABLE

Cast down

时间戳函数

1、时间获取以及时间字符使用

select now();//当前时间

 

SELECT SYSDATE();//当前时间

 

SELECT  CURRENT_TIMESTAMP();//当前时间

 

select now()+0;

 

以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。

2、 UNIX_TIMESTAMP(date)

如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。

select UNIX_TIMESTAMP();

SELECT UNIX_TIMESTAMP('2021-11-24 20:44:00'); 

当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。

3、 FROM_UNIXTIME(unix_timestamp)(重点)

以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。

select from_unixtime(1637757840);

select from_unixtime(1637757840)+0;//转换成字符

4、FROM_UNIXTIME(unix_timestamp,format) (重点)

返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。 时间戳转化为指定格式的函数from_unixtime.

格式:from_unixtime(bigint unixtime,string format)

format

yyyy-MM-dd hh:mm:ss yyyy-MM-dd hh 12小时制 yyyy-MM-dd HH 24小时制 yyyy-MM-dd hh:mm yyyyMMdd *注意yyyy要小写,千万不要大写*

 SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %M %D %h:%i:%s');

其他的转换格式,就是相应的format改变。

 

5、TIME_TO_SEC(time)

返回time参数,转换成秒。

 SELECT TIME_TO_SEC('21:01:00');

 

SELECT TIME_TO_SEC('00:39:38');

6、SEC_TO_TIME(seconds)

返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。

select SEC_TO_TIME(2378);

select SEC_TO_TIME(2378) + 0;

ORDER BY

ORDER BY 关键字用于对结果集进行排序。主要对结果集按照一个列或者多个列进行排序。默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

语法:

SELECT *column_name*,*column_name*
FROM *table_name*
ORDER BY *column_name*,*column_name* ASC|DESC;

Group By

GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

语法:

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

我们的表具有重复名称的记录如下所示:

 

用同样的 GROUP BY 语句来对所有记录按 NAME 列进行分组,如下所示:

SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

 


其他方法与函数

union

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SELECT *column_name(s)* FROM *table1*
UNION
SELECT *column_name(s)* FROM *table2*;

union all

UNION去重且排序 UNION ALL不去重不排序

语法:[SQL 语句 1] UNION ALL [SQL 语句 2]

select into

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

我们可以复制所有的列插入到新表中:

SELECT *
INTO *newtable* [IN *externaldb*]
FROM *table1;*

或者只复制希望的列插入到新表中:

SELECT *column_name(s)*
INTO *newtable* [IN *externaldb*]
FROM *table1;*

inser into select

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。

我们可以从一个表中复制所有的列插入到另一个已存在的表中:

**INSERT** **INTO** table2
**SELECT** * **FROM** table1;

或者我们可以只复制希望的列插入到另一个已存在的表中:

**INSERT** **INTO** table2
(column_name(s))
**SELECT** column_name(s)
**FROM** table1;

嵌套查询(省略)

分页查询

分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT <N-M> OFFSET <M>子句实现。

在MySQL中,分页查询一般都是使用limit子句实现,limit子句声明如下:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT子句可以被用于指定 SELECT 语句返回的记录数。需注意以下几点:

1、第一个参数指定第一个返回记录行的偏移量

2、第二个参数指定返回记录行的最大数目

3、如果只给定一个参数:它表示返回最大的记录行数目

4、第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行

5、初始记录行的偏移量是0(而不是 1)

SELECT * FROM student
LIMIT 3 OFFSET 0

 

注意

OFFSET是可选的,如果只写LIMIT 15,那么相当于LIMIT 15 OFFSET 0

在MySQL中,LIMIT 15 OFFSET 30还可以简写成LIMIT 30, 15

使用LIMIT <M> OFFSET <N>分页时,随着N越来越大,查询效率也会越来越低。

小结

使用LIMIT <M> OFFSET <N>可以对结果集进行分页,每次查询返回结果集的一部分;

分页查询需要先确定每页的数量和当前页数,然后确定LIMITOFFSET的值。

 

标签:table2,返回,table1,name,--,column,MySQL,自学,SELECT
来源: https://blog.csdn.net/weixin_52140190/article/details/121581105