当前位置:首页 > 学习笔记 > 数据库 > 数据库教程 DQL数据查询语言(重点)和增删改

数据库教程 DQL数据查询语言(重点)和增删改

刘广法2022年03月29日 18:05:03数据库6080
数据库教程 DQL数据查询语言(重点)和增删改-第1张图片-刘广法IT博客

数据库教程 DQL数据查询语言

关于数据库查询语句的相关描述:

1、* 所有

2、基本固定格式:SELEST * FROM (表名) WHERE (条件)

3、where :判断条件

4、区间查询:BETWEEN...AND... 

5、模糊查询:%:多个字符;_:单个字符

6、正则查询

7、排序查询:

    ORDER BY ... ASC:正序;

    ORDER BY...DESC:反序

8、多列查询,使用排序查询之间用逗号分开。

9、列起别名 用AS 或者省略

关于查询中的子查询

1、相等性子查询,子查询只能查询一个值

2、in 子查询,用于匹配多个值,子查询支持多行数据,但是只能是一列

3、any 和 all 关键字子查询,用于比较多个运算。

4、exists 关键字,表示判定子查询石头有值,相当于布尔判断。可在前面加 not 关键字

5、可以使用子查询作为临时表,子查询作为临时表的时候,必须起别名

6、相关子查询,子查询和父查询相关,无法单独执行。不能脱离付查询而执行

关于查询中的表连接

1、内连接:inner join 约束条件:曹家链接的两个表必须条件所匹配,当两个列表有冲突的时候,可以加表名前缀,连接不是画等号,任意谅解条件都可以,只要有合理的谅解逻辑就可以

2、左外链接:leet join    特点:左表数据全部显示,右表不匹配的显示null

3、右外连接:right join    特点:右表数据全部显示,左表数据不匹配显示null

4、全连接:mysql 暂不支持,但是通过左外连接和右外连接通过union 表示联合查询。

5、表连接后,相当于一个临时的表,可以对这个表进行任意的操作

6、交叉连接,左表和右表的每一条数据相互连接

7、不推荐的表连接

8、联合查询:通过union 关键字进行查询,

9、限定行数进行查询,通过限定指定的行数进行查询到指定的位置。limit 关键字。

第四部分:分组查询

1、分组查询,即按照一定的条件,将所有的数据分组,对分组后的数据及西贡统计查询-- GROUP BY表示分组。分组之后,可查询的数据只有分组列及聚合函数列。

-- 聚合函数一共有5个。sum avg max min count

-- 单分组,按一个条件分组


对视图的查询:


数据库查询语句的实例:

-- 查询所有的语句 --
SELECT * FROM t_student

-- 指定字段查询 --
SELECT id,stu_id,NAME,pinyin,sex FROM t_student

-- where限定条件查询 --
SELECT * FROM t_student WHERE id = 1

-- 比较运算符 < > <= >= != <> --
SELECT * FROM t_student WHERE id >500
SELECT * FROM t_student WHERE sex !='女'
SELECT * FROM t_student WHERE sex <> '女'

-- 逻辑运算符  and or not 与 或 非 --
SELECT * FROM t_student WHERE id >500 AND sex !='女'
SELECT * FROM t_student WHERE id <500 OR sex = '男'
SELECT * FROM t_student WHERE NOT sex != '女'

-- 算数运算符 + - * / --
SELECT * FROM t_student WHERE height + 10 > 180
SELECT * FROM t_student WHERE height - 19 < 190

-- 算数运算符 支持小括号提升优先级--
SELECT * FROM t_student WHERE (height + 10) * 2 > 190

-- 区间查询 between...and --
SELECT * FROM t_student WHERE height BETWEEN  150 AND 190

-- 模糊查询 --
SELECT * FROM t_student WHERE NAME LIKE '张%'
SELECT * FROM t_student WHERE name LIKE '%张%'
SELECT * FROM t_student WHERE NAME LIKE '_张'
SELECT * FROM t_student WHERE NAME LIKE '张__'

-- 正则查询 --
SELECT * FROM t_student WHERE NAME REGEXP '^.{3}$'

-- 查询排序--
SELECT * FROM t_student WHERE sex ='女' ORDER BY height ASC 
select * FROM t_student WHERE sex ='男' ORDER BY height DESC

-- 多列查询,多列之间使用逗号分开,
SELECT * FROM t_student WHERE sex = '女' 
ORDER BY height DESC, weight DESC, birthday DESC

-- 9、列起别名 用AS 或者省略
SELECT id AS 编号,stu_id AS 学号,`name` AS 姓名,pinyin 拼音,sex 性别,birthday 出生日期 FROM t_student

-- 第二部分 子查询
-- 1、相等性查询,子查询只能有一个之(一行一列),支持比较运算符
SELECT * FROM t_student WHERE id = (SELECT id FROM t_student WHERE `name` = '张家')
SELECT * FROM t_student WHERE id = (SELECT id FROM t_score WHERE score >= 100)

SELECT * FROM t_student WHERE NOT id = (SELECT id FROM t_score WHERE score >= 100)
SELECT * FROM t_student WHERE id <> (SELECT id FROM t_score WHERE score >= 100)
SELECT * FROM t_student WHERE id > (SELECT id FROM t_score WHERE score >= 100)

-- 2、in 子查询,用于匹配多个值。子查询支持多行数据,但是只能时一列
SELECT * FROM t_student WHERE id IN (1,2,3,4,5)
SELECT * FROM t_student WHERE id = 1 OR id = 2 OR id = 3 OR id = 4 OR id = 5
SELECT * FROM t_student WHERE id IN (SELECT id FROM t_score WHERE score >= 90 AND score <= 100)
-- not in子查询
SELECT * FROM t_student WHERE id NOT IN (SELECT id FROM t_score WHERE score >= 90 AND score <= 100)

-- 3. ANY和ALL关键字子查询,用于比较运算多个值。不支持all和any中使用常量集合
SELECT * FROM t_student WHERE id > ALL(SELECT id FROM t_score WHERE score >= 90 AND score <= 100)
SELECT * FROM t_student WHERE id > ANY(SELECT id FROM t_score WHERE score >= 90 AND score <= 100)

-- 4.exists关键字子查询,表示判定子查询是否有值,相当于布尔判断。exists前可以加not关键字
SELECT * FROM t_student WHERE EXISTS (SELECT id FROM t_score WHERE score >= 200)
SELECT * FROM t_student WHERE NOT EXISTS (SELECT id FROM t_score WHERE score >= 200)

-- 5.以子查询作为临时表,子查询作为临时表,必须起别名
SELECT * FROM (SELECT * FROM t_student WHERE sex = '女') AS t1

-- 6.相关子查询。子查询和父查询相关,无法单独执行,不能脱离父查询而执行
-- 查询出比同姓学生平均身高高10公分的学生
SELECT * FROM t_student t1 WHERE height - 10 > (SELECT avg(height) FROM t_student t2 WHERE t2.last_name = t1.last_name)

第三部分:表连接,重点,不同的表根据连接条件,连接到一起
-- 内连接,外连接,全连接,mysql不支持全连接,有间接手段实现

-- 1.内连接,inner join,约束:参与连接的两个表和必须条件所匹配
-- 查询出,学生基本信息以及考试分数,当列名有冲突时,可以加表名前缀
-- 连接条件不是说必须是等号,任意连接条件都可以,只要有合理的连接逻辑就可以
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
INNER JOIN t_score t2 ON t1.id = t2.student_id

-- 2.左外连接,LEFT JOIN,左连接的特点:左表数据全部显示,右表不匹配的列显示为null
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
LEFT JOIN t_score t2 ON t1.id = t2.student_id


-- 3.右外连接,RIGHT JOIN,右连接的特点:右表数据全部显示,左表不匹配的列显示为null
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
RIGHT JOIN t_score t2 ON t1.id = t2.student_id

-- 4.全连接。mysql不支持全连接。全连接表示左表和右表都全部显示,不匹配的显示为null
-- UNION表示联合查询
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
LEFT JOIN t_score t2 ON t1.id = t2.student_id
UNION
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
RIGHT JOIN t_score t2 ON t1.id = t2.student_id

-- 5.表连接之后,相当于一个全新的表,可以对这个表进行任意操作
SELECT t1.id,`name`,sex,birthday,score FROM t_student t1
INNER JOIN t_score t2 ON t1.id = t2.student_id
WHERE sex = '女' ORDER BY t1.`name` DESC

-- 6.交叉连接,使用几率很少。左表和右表中的每一条数据互相连接。
SELECT t1.*,t2.score FROM t_student t1
INNER JOIN t_score t2

-- 7.理解成表连接。不推荐,有缺陷,效率极低。
SELECT * FROM t_student t1,t_score t2 WHERE t1.id = t2.student_id


-- 联合查询,union关键字。结果集1 union 结果集2
-- 注意两个结果集的列的个数相同,显示列名以第一个结果集为准
SELECT id,height FROM t_student WHERE id > 990
UNION
SELECT birthday,id FROM t_student WHERE id < 10


-- 限定行数查询,可以限定从指定的位置查询到指定的位置
-- limit关键字。sqlserver:top  oracle:rownum
-- limit后跟一个参数的时候,表示限定查询的行数,默认从第0行开始查。开始位置是表的行索引,不是任意其中一列
SELECT * FROM t_student WHERE sex = '男' ORDER BY id LIMIT 5
-- 最常见的
SELECT * FROM t_student WHERE sex = '男' ORDER BY id LIMIT 0,5
-- offset表示偏移位置,即从第几行开始查,表的行索引是从0开始的。
SELECT * FROM t_student WHERE sex = '男' ORDER BY id LIMIT 5 OFFSET 0


-- 第四部分 分组查询
-- 分组查询,即按照一定的条件,将所有数据分组,对分组之后的数据进行统计查询
-- GROUP BY表示分组。分组之后,可查询的数据只有分组列及聚合函数列。
SELECT sex, count(id) FROM t_student GROUP BY sex
-- 聚合函数一共有5个。sum avg max min count
-- 单分组,按一个条件分组
SELECT sex, count(id)+5 人数, avg(height),min(height),max(weight),sum(iq) FROM t_student GROUP BY sex

-- 多分组,复合分组。按多个条件分组,多个条件之间使用逗号分隔
SELECT sex,CHAR_LENGTH(`name`) as 字数, count(id) FROM t_student GROUP BY sex, CHAR_LENGTH(`name`) ORDER BY 字数

-- 按出生年份分组
SELECT sex,YEAR(birthday) 出生年份, count(id) FROM t_student GROUP BY sex, YEAR(birthday) ORDER BY 出生年份

-- 分组过滤,分组筛选,使用having关键字,只能是分组列及聚合函数列的条件
-- 只查询2000年以后的分组
-- 注意:where是写在group by前面,优先级高于group by。
SELECT sex,YEAR(birthday) 出生年份, count(id) FROM t_student 
GROUP BY sex, YEAR(birthday) HAVING 出生年份 >= 2000
ORDER BY 出生年份


-- 对视图的查询
SELECT * FROM v_groupsex
SELECT * FROM v_fulladdress_1

数据库中的增删改:

-- 第五部分 增,删,改
-- 插入行语法
INSERT INTO t_student (stu_id,`name`,sex,birthday,height) VALUES ('3333','三儿','男','2000-1-1',180)
-- 如果不指定列名的话,则意味着对每一列都需要赋值
INSERT INTO t_score VALUES (50,50,50,99.5,'A')
-- 要插入的数据,可以通过一个查询而得出
INSERT INTO t_student (stu_id,`name`,sex,birthday,height) 
SELECT '999',`name`,sex,birthday,height FROM t_hr_humen WHERE id = 10


-- 修改语法
UPDATE t_student SET sex = '男',`name`= '张大欣' WHERE id = 1
UPDATE t_student SET weight = weight + 10 WHERE id < 5

-- update支持表连接
UPDATE t_student t1 
INNER JOIN t_score t2 on t1.id = t2.student_id
SET iq = 300
WHERE t2.score = 100

-- 删除语法
DELETE FROM t_student WHERE id = 1
DELETE FROM t_student WHERE id < 100


-- 去重复。distinct表示去重,比较影响查询性能
SELECT DISTINCT sex FROM t_student


来源:刘广法博客,请注意转载出处,网站地址为:https://liuguangfa.com/

扫描二维码推送至手机访问。

版权声明:本文由刘广法博客发布,如需转载请注明出处。

本文链接:https://liuguangfa.com/database/27.html

分享给朋友:

“数据库教程 DQL数据查询语言(重点)和增删改” 的相关文章

数据库教程 关于数据库的数据类型以及数据库的约束

数据库教程 关于数据库的数据类型数据库的数据类型:一、整数类型:tinyint:一个字节smallint:两个字节mediumint:三个字节int:四个字节bigint:八个字节二、字符串类型:char:定长字符串,长度不足自动被空格varchar:不定长字符串三、小数类型:float:四个字节d...

数据库教程 索引

数据库教程 索引index:提升查询效率频率使用到为查询条件的列,能唯一标识实体的列。...

数据库教程 jdbc

java 和 数据库 连接技术odbc:淘汰10年了。只能用在windows系统上关于jdbc 的相关描述:关于jdbc的实操七步:package com.liuguangfa.jdbc; import java.sql.Connection; import j...

数据库练习 数据库查询练习 ***

冰人集团系统数据库设计1. 使用MySQL 8.x版本数据库,使用Navicat作为数据库客户端管理图形界面工具。2. 创建名为“iceman2018”的数据库。字符集使用utf8 -- UTF-8 Unicode,排序规则使用utf8_general_ci。3. 创建“部门”表,表名为t_depa...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。