MySQL-DQL查询语句
DQL语言
DQL(Data Query Language,数据查询语言)
①查询数据库数据,如SELECT语句
②简单的单表查询或多表的复杂查询和嵌套查询
③数据库语言中最核心、最重要的语句
④使用频率最高的语句
SELECT语法
SELECT [ALL|DISTINCT]
{8|table.|[table.filed1[as alias1][,table.field2[as alias2]][,...]}
FROM table_name [as table_alias]
[left|out|inner join table_name2] #联合查询
[WHERE ...] #指定结果需满足的条件
[GROUP BY] #指定结果按照哪几个字段来分组
[HAVING ...] #过滤分组的记录必须满足的次要条件
[ORDER BY...] #指定查询记录按一个或者多个条件排序
[LIMIT { [offset,]row_count | row_countOFFSET offset }]; #指定查询的记录从哪条至哪条
[ ] 括号代表可选的;
{ } 括号代表必须的;
#MySQL语句中的注释符,也可以用 /* 该处为注释 */
指定查询字段
查询表中所有的数据列结果,采用“*”符号
select * from student;
可指定查询的结果数据列
如主查询student表中的学号、姓名、电话
select StudentNo、StudentName,Phone from student;
AS语句
可给数据列取一个新别名
可给表取一个新别名
可把经计算或总结的结果用另外一个新名称来代替
AS子句用法
select StudentNo AS “学号” from student;
select a.StudentNo AS “学号” from student a;
select Phone+1 AS Tel from student;
AS也可以省略不写
distinct关键字的使用
作用
去掉select查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
select distinct 字段名1,字段名2... from 表名
ALL关键字时默认的,返回所有的记录,与之相反
#查询成绩表中的所包含的课程ID
select distinct SubjectNo from result;
使用表达式
表达式一般由文本值、列值、NULL、函数和操作符等组成
应用场景:
①select语句返回结果列中使用
②select语句的order by、having等子句中使用
③DML语句中的where条件语句中使用表达式
在SQL语句中使用表达式
where条件语句
用于检索数据表中符号条件的记录
搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件的组成:①逻辑操作符、②比较操作符
逻辑操作符
比较操作符
连接查询
内连接(inner join)
1.等值和非等职的连接查询
①与单表查询类似,都是SELECT语句
②把多个表放到FROM后,并用逗号隔开
③可使用AS关键字取别名,便于引用
④如无重名查询字段则可省略数据表的指定
2.自身连接查询
外连接(out join)
1.左外连接(LEFT JOIN)
从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行;
SELECT 字段1,字段2,...FROM table_1
LEFT(OUTER) JOIN table_2 ON table_1.字段x = table_2.字段y;
2.右外连接(RIGHT JOIN)
从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行;
SELECT 字段1,字段2,...FROM table_1
RIGHT (OUTER) JOIN table_2 ON table_1.字段x = table_2.字段y;
不同的SQL JOIN对比
操作符名称 | 描述 |
---|---|
INNER JOIN | 如果表中由至少一个区配,则返回行 |
LEFT JOIN | 不论右表是否由区配,都会返回左表的所有行 |
RIGHT JOIN | 不论左表是否由区配,都会返回右表的所有行 |
ORDER BY(排序)
对SELECT语句查询得到的结果,按某些字段进行排序
与DESC或ASC搭配使用,默认为ASC
ASC为升序排列
DESC为降序排列
语法:
ORDER BY 列名1 ASC/DESC[,列名2 ASC/DESC,...]
LIMIT(分页显示)
分页显示,对用户体验、网络传输、查询压力上都有好处
语法:
LIMIT[m,]n
或 LIMIT n OFFSET m
限制SELECT返回结果的行数
m指定第一个返回记录行的偏移量(显示的起始位置)
n指定返回记录行的最大数目(显示行数)
m不指定则偏移量为0,从第一条开始返回前n条记录
在MySQL中,显示每页的行数可以使用 LIMIT (页码-1)*行数,行数
子查询
在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
嵌套查询可由多个子查询组成,求解的方式是由里及外
子查询返回的结果一般都是集合,故而建议使用IN关键字
MySQL函数
包括1.数学函数
2.字符串函数
3.日期和时间函数
4.系统信息函数
1.数学函数
常用的有:
(1)ABS() 绝对值
(2)CEILING() 大于等于我的最小整数(天花板)
(3)FLOOR() 小于等于我的最大整数(地板)
(4)RAND() 返回0~1之间的随机数
(5)SIGN() 符号函数,正数返回1,负数返回-1,0返回0
2.字符串函数
常用有:
(1)CHAR_LENGTH() 返回字符串中包含的字符数
(2)CONCAT() 合并字符串,参数可有多个,用逗号隔开
(3)INSERT() 替换字符串,从某个位置开始,替换某个长度,如果起始位置超过字符串长度,则返回源字符串
如: INSERT(‘我爱课工场’,1,3,‘很爱’)
(4)LOWER() 变小写
(5)UPPER() 变大写
(5)LEFT() 从左边截取几位,如:LEFT(‘你好’,2)
(6)RIGHT() 从右边截取几位
(7)REPLACE() 替换指定字符,如:REPLACE(‘欢迎你,你好’,‘你’,‘你好’)
(8)SUBSTR() 截取,从哪个位置开始截取,截取多长
如:SUBSTR(‘课工场欢迎你’,1,3)
(9)REVERSE() 反转字符串
3.日期和时间函数
常用的有:
(1)CURRENT_DATE()
等同于 CURDATE()
获取当前日期
(2)NOW()
等同于 LOCALTIME()
等同于 SYSDATE()
获取当前日期和时间
(3)YEAR(NOW())
MONTH(NOW())
DAY(NOW())
HOUR(NOW())
MINUTE(NOW())
SECOND(NOW())
分别获取当前日期中的某个部分
4.系统信息函数
常用的有:
(1)VERSION() 显示版本信息
(2)USER() 菜单用户信息
统计函数(聚合函数)
函数名称 | 描述 |
---|---|
COUNT() | 返回满足SELECT条件的记录总和数,如 SELECT COUNT( * ),不建议使用 *,效率低, ()中也可以使用1,或者列名 COUNT()为非空值计数,不会计算空值 |
SUM() | 返回数字字段或表达式列作统计,返回一列的总和 ()中通常加列名 |
AVG() | 通常为数值字段或表达式列作统计,返回一列的平均值 ()中通常为列名 |
MAX() | 可以为数值字段、字符字段或表达式列作统计,返回最大的值 |
MIN() | 可以为数值字段、字符字段或表达式列作统计,返回最小的值 |
GROUP BY(分组)
对所有数据进行分组统计。分组的依据字段可以有多个,并依次分组
与HAVING结合使用,进行分组后的数据筛选
GROUP BY的语句顺序在WHERE后面,ORDER BY 的前面
通常在对数据使用计算统计的时候,会用到GROUP BY分组
HAVING
过滤分组的记录必须满足的次要条件。SELECT语句中,在GROUP BY分组之后再进行条件筛选,就不能使用WHERE,而是在GROUP BY后面通过HAVING进行分组后的条件筛选。HAVING的作用等同于WHERE