DQL查询数据(最最最重点!!!)

DQL

(Data Query Language):数据查询语言

1.所有的查询操作都用它 Select4

2.简单的查询和复杂的查询它都能做

3.数据库中最核心的语言,最重要的语句

4.使用频率最高的语句

指定查询字段

--查询全部的学生
SELECT * FROM student

--查询全部的成绩
SELECT * FROM result


--查询指定的字段
SELECT `studentno`,`studentname` FROM student

--别名,给结果起名字
SELECT `studentno` AS 学生学号,`` AS 学生姓名 FROM student


--函数 concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student

语法:SELECT 字段,......FROM 表

去重distinct

作用:去除select查询出来的结果中重复的数据,重复的数据只显示一条

--查询哪些同学参加了考试
SELECT * FROM result
--查询有哪些同学参加了考试
SELECT `studentno` FROM result
--发现重复数据,去重 distinct
SELECT DISTINCT `studentno` FROM result

数据库的列(表达式)

查询系统版本
SELECT VERSION()


--可以用来计算
SELECT 100*3-1 AS 计算结果

--查询自增的步长
SELECT @@auto_increment_increment AS 自增的不长


--学员考试成绩加1分查看
SELECT `studentno`,`studentresult`+1 AS 提分后   FROM result

数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量........

select 表达式 from 表

where条件子句

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

逻辑与算符

运算符语法描述
and &&a and b    a&&b逻辑与,两个都为真,结果为真
or   ||a or b       a||b逻辑或,其中一个为真,则结果为真
Not !not a         ! a逻辑非,真为假,假为真

--查询考试成绩在95~100之间
SELECT `studentno`,`studentresult` FROM result
WHERE studentresult>=70 AND studentresult<=100

--查询考试成绩大于60分以上的同学
SELECT `studentno`,`studentresult` FROM result
WHERE studentresult >60;

--AND &&
SELECT `studentno`,`studentresult` FROM result
WHERE studentresult>=70 && studentresult<=100

--模糊查询(区间)
SELECT `studentno`,`studentresult` FROM result
WHERE studentresult BETWEEN 70 AND 100


--查询除了1000号学生以外的同学的成绩
SELECT `studentno`,`studentresult` FROM result
WHERE studentno!=1000;
--查询除了1000号和1002号学生以外的同学的成绩
select `studentno`,`studentresult` FROM result
WHERE studentno!=1000 AND studentno!=1002

--!= not 
SELECT `studentno`,`studentresult` FROM result
WHERE NOT `studentno`=1000;

模糊查询:比较运算符

运算符语法描述
IS NULLa is null如果操作符为NULL,结果为真
IS NOT NULLa is not null如果操作符不为NULL,结果为真
BETWEENa between and c若a在b和c之间,则结果为真
LIKEa like bSQL匹配,如果a匹配b,则结果为真
INa in(a1,a2,a3.......)假设a在a1,或者a2....其中的某一个值中,那么结果为真
-----------模糊查询------------
--查询姓张的学生
SELECT `studentno`,`studentname`FROM `student`
WHERE `studentname`LIKE'张%'


--查询姓张的同学,名字后面只有一个字的
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentname` LIKE '张_'

--查询姓赵的同学,名字后面只有两个字的
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentname` LIKE '赵__'

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


---=======IN=====---
---查询1000,1001号学员


--查询在北京朝阳的学生
SELECT `studentno`,`studentname` FROM `student`
WHERE `address` IN('北京朝阳')


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

--查询地址不为空的同学
SELECT `studentno`,`studentname` FROM `student`
WHERE `address` IS NOT NULL


--查询出生日期为空的同学
SELECT `studentno`,`studentname` FROM `student`
WHERE `borndate`= '' OR `borndate` IS NULL

--查询地址不为空的同学
SELECT `studentno`,`studentname` FROM `student`
WHERE `borndate` IS NOT NULL

联表查询

JOIN

-----连表查询 join----
查询参加了考试的同学(学号,姓名,科目,分数)

SELECT *FROM student
SELECT * FROM result

/*
思路
1.分析需求,分析查询的字段来自哪些表(连接查询)
2.确定使用哪种连接查询?7种
3.确定交叉点(两个表中哪个数据是相同)
4.判定条件:学生表中的studentno = 成绩表中的studentno
*/
-----INNER JOIN ----
SELECT 	s.studentno,studentname,subjectno,studentresult
FROM student AS s
INNER JOIN result AS r 
WHERE s.studentno = r.studentno


-- RIGHT JOIN
SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentno = r.studentno


--LEFT JOIN 
SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
LEFT JOIN result AS r
ON s.studentno = r.studentno
操作描述
Inner join如果表中至少有一个匹配上,就返回行
left join会从左表中返回所有的值,即使右表中没有匹配
right join会从右表中返回所有的值,即使左表中没有匹配
/*--思考题(查询了参加考试的同学信息:学号,学生姓名,科目名,分数)
思路
1.分析需求,分析查询的字段来自哪些表(连接查询)
2.确定使用哪种连接查询?7种
3.确定交叉点(两个表中哪个数据是相同)
4.判定条件:学生表中的studentno = 成绩表中的studentno
*/
SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentno = r.studentno
LEFT JOIN `subject`AS sub
ON r.subjectno = sub.subjectno

--我要查询哪些数据 select
--从哪几个表中查from表,xxx join 连接的表 on 交叉条件
--假设存在一种多张表查询,慢慢来,先查询两张表然后在慢慢增加

自连接(了解即可)

自己的表和自己的表连接,核心:一张表拆分为两张一样的表

父类

categroyidcategoryname
2信息技术
3软件开发
5美术设计

子类

pidcategroyidcategoryname
34数据库
36web开发
57ps技术
28办公信息

查询父类对应的子类

父类子类
信息技术办公信息
软件开发数据库
软件开发web开发
美术设计ps技术
--自连接
--查询父子信息,把一张表看成两个一模一样的表
SELECT c.`categoryname` AS '父类',d.`categoryname` AS '子类'
FROM `category` AS c , `category` AS d
WHERE c.`categoryid` = d.`pid`

分页和排序

排序:ASC(升序)  DESC(降序)

--分页limit和排序 ORDER BY--
--根据查询的结果,根据成绩来排序
--升序 ASC 降序 DESC
SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno =r.studentno 
INNER JOIN `subject` AS sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult ASC

分页:limit


--分页
--为什么要分页:缓解数据库压力,给人的体验更好
--分页,每页只显示5条数据
--语法:LIMIT 当前页、页面大小
--LIMIT 0,5

SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno =r.studentno 
INNER JOIN `subject` AS sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult ASC
LIMIT 0,5

思考题

--思考题:
--查询java第一学年 课程成绩排名前十的学生,并且分数要大于70分的学生
SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno = r.studentno
INNER JOIN `subject` AS sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '高等数学-1' AND studentresult>70
ORDER BY studentresult DESC
LIMIT 0,3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值