欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-19 13:55:00
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 …] #过滤分组的记录必须满足...

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、搜索条件的组成(逻辑操作符 比较操作符)
逻辑操作符:
2020-04-29 使用DQL命令查询数据(一)
2020-04-29 使用DQL命令查询数据(一)
1、数值数据类型的记录之间才能进行算术运算
2、相同数据类型的数据之间才能进行比较
不同的SQL JOIN对比:
2020-04-29 使用DQL命令查询数据(一)
–模糊查询
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慢很多

本文地址:https://blog.csdn.net/sunbin11220904/article/details/107151581