DQL语言
DQL( Data Query Language 数据查询语言 )
- 查询数据库数据 , 如SELECT语句
- 简单的单表查询或多表的复杂查询和嵌套查询
- 是数据库语言中最核心,最重要的语句
- 使用频率最高的语句
SELECT语法
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}];
-- 指定查询的记录从哪条至哪条
注意:[ ] 括号代表可选的 , { }括号代表必选得
查询指定字段
查询表中所有的数据列结果 , 采用 **" \* "** 符号; 但是效率低,不推荐
-- 语法
SELECT 字段 FROM 表
-- 查询所有学生信息
SELECT * FROM student;
-- 查询指定列(学号 , 姓名)
SELECT studentno,studentname FROM student;
AS 子句作为别名
作用:
- 可给数据列取一个新别名
- 可给表取一个新别名
- 可把经计算或总结的结果用另一个新名称来代替
例:
-- 这里是为列取别名(当然as关键词可以省略)
SELECT studentno AS 学号,studentname AS 姓名 FROM student;
-- 使用as也可以为表取别名
SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
-- 使用as,为查询结果取一个新名字
-- CONCAT()函数拼接字符串
SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;
DISTINCT关键字的使用
作用:去掉SELECT查询返回的记录结果中重复的记录 ( 返回所有列的值都相同 ) , 只返回一条
例:
-- # 查看哪些同学参加了考试(学号) 去除重复项
SELECT * FROM result; -- 查看考试成绩
SELECT studentno FROM result; -- 查看哪些同学参加了考试
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 , (默认是ALL)
使用表达式中的列
数据库中的表达式 : 一般由文本值 , 列值 , NULL , 函数和操作符等组成
应用场景 :
- SELECT语句返回结果列中使用
- SELECT语句中的ORDER BY , HAVING等子句中使用
- DML语句中的 where 条件语句中使用表达式
-- selcet查询中可以使用表达式
SELECT @@auto_increment_increment; -- 查询自增步长
SELECT VERSION(); -- 查询版本号
SELECT 100*3-1 AS 计算结果; -- 表达式
-- 学员考试成绩集体提分一分查看
SELECT studentno,StudentResult+1 AS '提分后' FROM result;
- 避免SQL返回结果中包含 ' . ' , ' * ' 和括号等干扰开发语言程序
函数CONCAT(a,b)
-- 函数 Concat(a,b)
SELECT CONCAT('姓名:',userName) AS 新名字 FROM t_admin
WHERE条件语句
作用:用于检索数据表中 符合条件 的记录
搜索条件可由一个或多个逻辑表达式组成 , 结果一般为真或假
逻辑操作符
操作符名称 | 语法 | 描述 |
AND 或 && | a AND b 或 a && b | 逻辑与,同时为真结果才为真 |
OR 或 || | a OR b 或 a || b | 逻辑或,只要一个为真,则结果为真 |
NOT 或 ! | NOT a 或 !a | 逻辑非,若操作数为假,则结果为真(真为假,假为真) |
尽量使用英文字母
-- ======================== where ==========
--查询考试成绩表中的学号和成绩
SELECT `studentno`,`studentresult` FROM `result`
-- 查询考试成绩在 95~100分之间
SELECT `studentno`,`studentresult` FROM `result`
WHERE studentresult>=90 AND studentresult<=100
-- and &&
SELECT `studentno`,`studentresult` FROM `result`
WHERE chengji>=70 && chengji<90
-- 模糊查询(区间)
SELECT `studentno`,`studentresult` FROM `result`
WHERE `studentresult` BETWEEN 90 AND 100
-- 除了1号学生之外的同学的成绩
SELECT `studentno`,`studentresult` FROM result
WHERE `studentno`!=1001;
-- != not
SELECT `studentno`,`studentresult` FROM result
WHERE NOT `studentno` = 1001
模糊查询操作符详解
模糊查询:比较运算符
运算符 | 语法 | 描述 |
IS NULL | a is null | 如果操作符为NULL,结果为真 |
IS NOT NULL | a is not null | 如果操作符不为NULL,结果为真 |
BETWEEN | a between b and c | 若a在b和c之间,则结果为真 |
LIKE | a like b | SQL匹配,如果a匹配b,则结果为真 |
IN | a in (a1,a2,a3...) | 假设a在a1,或者a2.....其中的某一个值中,结果为真 |
例:
-- ======================== 模糊查询 ==========
-- 查询姓小的同学
-- like结合 %(代表0到任意个字符) _(一个字符)
SELECT `uid`,`uname` FROM `user`
WHERE `uname` LIKE '小%'
-- 查询姓李的同学后面只有一个字的
SELECT `uid`,`uname` FROM `user`
WHERE `uname` LIKE '李_'
-- 查询姓孙的同学后面只有两个字的
SELECT `uid`,`uname` FROM `user`
WHERE `uname` LIKE '孙__'
-- 查询名字中间有荣字的同学
SELECT `uid`,`uname` FROM `user`
WHERE `uname` LIKE '%荣%'
-- ========== in(具体的一个或多个值)=====
-- 查询 1,2,3号学员
SELECT `uid`,`uname` FROM `user`
WHERE `uid` IN(1,2,3);
-- 查询学生邮箱888@qq.com
SELECT `uid`,`uname` FROM `user`
WHERE `uemail` IN('888@qq.com')
-- ========== null not null =====
-- 查询邮件为空的同学 null ''
SELECT `uid`,`uname` FROM `user`
WHERE `uemail`='' OR `uemail` IS NULL
-- 查询邮件不为空的同学
SELECT `uid`,`uname` FROM `user`
WHERE `uemail`='' OR `uemail` IS NOT NULL
小结:
1.like结合 %(代表0到任意个字符) _(一个字符)
2.查询姓名中含有特殊字符的需要使用转义符号 '\'
3.不能直接写=NULL , 这是代表错误的。用 is null