ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL(笔记--自学1)

2021-11-27 18:32:48  阅读:205  来源: 互联网

标签:table2 返回 table1 name -- column MySQL 自学 SELECT


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有