您的位置:首页 > 其它

2020-04-29 使用DQL命令查询数据(一)

2020-07-12 16:58 162 查看

SELECT [ALL | DISTINCT]
{ * | table.* | [ table.field1 [ 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_count
OFFSET offset }] ; #指定查询的记录从哪条至哪条
DQL 数据查询语言 如 select 语句:
select * from table 名;
查询所有列,效率比较低;
#查询指定列(学号,姓名)
select studentNo.studentName from student;
where 条件语句:
1、用于检索数据表中符合条件的记录
2、搜索条件可由一个或多个逻辑表达式组成,结果
一般为真或假
3、搜索条件的组成(逻辑操作符 比较操作符)
逻辑操作符:


1、数值数据类型的记录之间才能进行算术运算
2、相同数据类型的数据之间才能进行比较
不同的SQL JOIN对比:

–模糊查询
select * from student
where stu_name like “李%”;
–%代表匹配0或任意个字符
–_代表匹配单个字符
–in 等值判断
select * form tb_point
where point in (80,90,60);
–连接查询
笛卡尔积 ,尽量避免
也可在笛卡尔积的基础上进行 筛选;
#查询成绩为85,86,87 的同学的姓名
SELECT s.s_name 学生姓名
FROM ad_student s
JOIN ad_scroce s1
ON s.s_id=s1.stu_id
WHERE s1.s_scroce IN(85,86,87);
#删除“1号”同学的课程的成绩
DELETE FROM ad_scroce
WHERE stu_id=1;
#查询不同课程
#但成绩相同的学生的学号、课程号、学生成绩
SELECT s1.stu_id 学号,
s1.s_scroce 成绩
FROM ad_scroce s1,ad_scroce s2,ad_scroce s3
WHERE s1.stu_id=s2.stu_id=s3.stu_id
AND s1.cou_id=1
AND s2.cou_id=2
AND s3.cou_id=3
AND s1.s_scroce=s2.s_scroce=s3.s_scroce;
Between and :范围检索
1、根据一个范围值来检索
2、等同于 >= 和 <= 联合使用
使用in进行范围查询
1、查询的字段x的值,至少和括号中的一个值相同
2、多个值之间用英文逗号隔开
SELECT * FROM subject where ClassHour =
100 OR ClassHour =110 OR ClassHour =
120; #普通处理方式
SELECT * FROM subject where ClassHour IN (
100, 110,120 );
使用IN进行查询方式,更为简洁,效率更高
null空值条件查询
a、null 代表“无值”
b、区别于0值和空字符串“”
c、只能出现在定义允许为null的字段
d、须使用is null或 is not null 比较操作符去比较
#不能使用 属性值=null 的用法!!
自连接查询 案例:
CREATE TABLE IF NOT EXISTS category(
categoryId INT(10) UNSIGNED NOT
NULL AUTO_INCREMENT,
pid INT(10) NOT NULL,
categoryName VARCHAR(32) NOT NULL,
PRIMARY KEY(categoryId)
);
INSERT INTO category VALUES
(2,1,“美术设计”),
(3,1,“软件开发”),
(4,3,“数据库基础”),
(5,2,“Photoshop基础”),
(6,2,“色彩搭配学”),
(7,3,“PHP基础”),
(8,3,“一起学JAVA”);
SELECT * FROM category;
SELECT categoryName
FROM category
WHERE categoryId IN(2,3);
SELECT categoryName
FROM category
WHERE pid IN(2,3);
#当需要多次用到同一个表的同一个字段
#并且它们还有关联的情况下,才需要用到自连接
SELECT c1.categoryName 父栏目名称,
c2.

categoryName
子栏目名称
FROM category c1, category c2
WHERE c1.categoryId=c2.pid;
左连接 and 右连接
#左连接 以左表为基准 右表来一一匹配,匹配不上
的,返回左表的记录,右表以null填充
SELECT
student.studentno,studentname,subjectno,studentresult
FROM student s
LEFT JOIN restult r
ON r.studentNo=s.studentNo
#右连接 以右表为基准 左表来一一匹配,匹配不上
的,返回右表的记录,左表以null填充
SELECT
student.studentno,studentname,subjectno,studentresult
FROM student s
RIGHT JOIN restult r
ON r.studentNo=s.studentNo
select 列名
from table //先写的表为左表
left /right join table2 //后写的表为右表
UNION与UNION ALL的区别:
  1.对重复结果的处理:UNION会去掉重复记
录,UNION ALL不会;
  2.对排序的处理:UNION会排序,UNION ALL
只是简单地将两个结果集合并;
  3.效率方面的区别:因为UNION 会做去重和排
序处理,因此效率比UNION ALL慢很多

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: