2020-04-29 使用DQL命令查询数据(一)
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慢很多
本文地址:https://blog.csdn.net/sunbin11220904/article/details/107151581
上一篇: sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
下一篇: 死锁解决方案
推荐阅读
-
SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句
-
[sql]使用自连接查询多对一数据
-
使用Java实现数据库编程—03 第三章 高级查询(一)
-
mysql数据库表的创建以及字段的增删改查操作及一些常用的查询命令介绍
-
用一张表来存储数据状态,并且可以进行多状态精确查询;使用二进制来表示数据状态,并且是可以无顺序的状态;解决使用中间表来存储数据的多状态;数据状态还可以这么玩;
-
php中使用临时表查询数据的一个例子
-
mysql学习【第3篇】:使用DQL查询数据
-
android通过adb命令使用sqlite3查询数据
-
使用jdbc原生态手写statement连接数据库并查询某一张表
-
Access数据库提示OleDbException (0x80004005): 操作必须使用一个可更新的查询