数据库中的 DQL查询数据

DQL

(Data QueryLanguage )数据查询语言

  • 所有的查询操作都用 selec
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

指定查询字段

-- 查询全部的学生   select 字段 from 表 
select * from student

-- 查询指定字段  
select `studentid`,`studentname` from student

-- 别名  给结果起一个名字 AS  也可以给表起别名
select `studentid` as 学号,`studentname` as 学生姓名 from student as s

-- 函数 Concat(a,b)
select Concat('姓名:',studentname) as 新名字 from student

列名不是那么的见名知义,就可以起别名 AS

去重 distinct

-- 发现重复数据,去重
SELECT DISTINCT `studentno` FROM student

数据库的列,表达式

-- 用来计算
SELECT 30*2+1 AS 计算结果

-- 查询系统版本
SELECT VERSION()

数据库中的表达式:文本值、列、NULLL、函数、计算表达式、系统变量……

select 表达式 from 表

where条件子句

作用:检索数据中符合条件的值

逻辑运算符

运算符 语法 描述
and && a and b、 a && b 逻辑与,两个都为真,结果为真
or || a or b、 a||b 逻辑或,其中一个为真,结果为真
not ! not a、 !a 逻辑非,真为假,假为真
-- 查询成绩在80~90之间的  AND &&
SELECT studentid, `studentresult` FROM result
WHERE studentresult >=80 AND studentresult <=90

-- 模糊查询 (区间) BETWEEN a AND b
SELECT studentid, `studentresult` FROM result
WHERE studentresult BETWEEN 80 AND 90

模糊查询:比较运算符

运算符 语法 描述
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 studentid, `studentname` FROM student
WHERE studentname LIKE '张%'

-- 查询姓张的同学,名字为两个字的
SELECT studentid, `studentname` FROM student
WHERE studentname LIKE '张_'

-- 查询名字中有嘉字的同学
SELECT studentid, `studentname` FROM student
WHERE studentname LIKE '%嘉%'

-- 查询地址为空的学生 NULL ''
SELECT studentid, `studentname` FROM student
WHERE address='' OR address IS NULL

-- 查询在北京、安徽的学生
SELECT studentid, `studentname` FROM student
WHERE `address` IN ('北京','安徽')

联表查询

在这里插入图片描述

mysql七种join理论

-- 内连接
select * from A inner join B where A.key=B.key;

-- 左连接
select * from A left join B on A.key=B.key where B.key is null;

-- 右连接
select * from A right join B on A.key=B.key where A.key is null;

-- 左外连接
select * from A left join B on Akey=B.key;

-- 右外连接
select * from A right join B on A.key=B.key

-- 全外连接
select * from A left join B where A.key=B.key union select * from A right join B where A.key=B.key;

-- 两表独有的数据集
select * from A left join B on A.key=B.key where B.key is null 

union 

select * from A right join B on A.key=B.key where A.key is null;

子查询

-- 子查询()
SELECT StudentNo, r.SubjectName,SubjectResult
FROM result r
-- 等价于WHERE subjectNo=xxxx(数据库-1编号)
WHERE subjectNo=(
-- 查询结果为数据库-1对应的编号
	SELECT SubjectNo FROM `subject` 
	WHERE subjectName ='数据库结构-1';
)
ORDER BY SubjectResult DESC;
-- 查询数据库-1 编号
SELECT SubjectNo FROM `subject` WHERE subjectName ='数据库结构-1';

分页和排序

排序(ORDER BY)

  • 升序 :ASC
  • 降序 :DESC
  • ORDER BY: 通过那个字段排序,怎么排
-- 查询的结果根据 成绩升序 排序
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN `result` r
ON s.StudentNo = r.StudentNo
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE subjectName = '数据库结构-1'
ORDER BY StudentResult ASC

分页 (LIMIT)

语法:limit(查询起始下标,pageSize)

-- 分页,每页只显示五条数据  
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN `result` r
ON s.StudentNo = r.StudentNo
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE subjectName = '数据库结构-1'
ORDER BY StudentResult ASC
LIMIT 5,5

-- 第一页  limit 0,5      (1-1)*5
-- 第二页  limit 5,5       (2-1)*5
-- 第三页  limit 10,5      (3-1)*5
-- 第N页   limit 0,5       (n-1)* pageSize,pageSize
-- 【pageSize:页面大小】
-- 【(n-1)* pageSize:起始值】
-- 【n :当前页 】
-- 【数据总数/页面大小 = 总页数】

这里是果力成,欢迎你的到来阅读,关注公众号 IT果力成一起学习!

                                                                             ©果力成

猜你喜欢

转载自blog.csdn.net/qq_58372242/article/details/123864070
今日推荐