SQL--查询

news/2024/12/22 14:03:31/文章来源:https://www.cnblogs.com/taketomyheart/p/18447658

CREATE TABLE emp (
id INT AUTO_INCREMENT PRIMARY KEY,
empname VARCHAR(100),
empage INT,
job_position VARCHAR(100),
salary DECIMAL(10, 2),
hire_date DATE,
managerid INT
);

INSERT INTO emp (empname,empage,job_position,salary,hire_date,managerid) VALUES
('张三',51,'总经理', 8000.00,'2020-01-15', 0),
('李四', 42,'开发部门经理', 7000.00,'2021-06-22', 1),
('王五', 33,'开发组长', 5500.00, '2022-08-05', 2),
('赵六', 28,'开发', 4500.00, '2019-03-10', 3),
('钱七', 35,'开发', 4500.00, '2018-12-01', 3),
('孙八', 46,'销售部门经理', 6000.00, '2020-09-17', 1),
('周九', 23,'销售', 5500.00, '2021-04-25', 6),
('吴十', 21,'开发', 4500.00, '2022-11-30', 3),
('郑十一',30, '市场', 6200.00, '2019-07-15', 6),
('王十二', 32,'销售', 5500.00, '2020-10-20', 6);

INSERT INTO emp (empname,empage,job_position,salary,hire_date) VALUES
('王十三', 32,'销售', 5500.00, '2020-10-20');

单表查询

SELECT * FROM emp;

* 表示所有字段

指定字段查询数据

SELECT id,empname FROM emp;

条件查询

WHERE

> < >= <= <>

查询薪资大于5000的员工(id,empname,salary)

SELECT id,empname,salary FROM emp WHERE salary > 5000;

查询薪资不等于5000的员工(id,empname,salary)

SELECT id,empname,salary FROM emp WHERE salary <> 5000;

and or in is is not

and 并且

查询员工id 大于等于4的 并且 员工id 小于等于 8的

SELECT id,empname,salary FROM emp WHERE id >=4 and id <=8;

or 和 in

查询员工id 等于4的 or 员工id 小于 8的

SELECT id,empname,salary FROM emp WHERE id = 7 or id < 5;

in 范围区间 相当于多个or

SELECT id,empname,salary FROM emp WHERE id in(1,2,3,5,7);

is 数据是不是为空

SELECT id,empname,salary FROM emp WHERE managerid is not null;
SELECT id,empname,salary FROM emp WHERE managerid is null;

as 别名 对于字段 或者表名 简写一下

SELECT id,empname as name,salary FROM emp WHERE id >=4 and id <=8;

SELECT * FROM department as d;

多表查询

内连接查询
SELECT * FROM department;
SELECT * FROM students;

隐式内连接

查询每一个学生和关联的学院

SELECT * FROM students,department WHERE students.deptid = department.did;

SELECT * FROM students as s,department as d WHERE s.deptid = d.did;

join 显示内连接

SELECT * FROM students INNER JOIN department;
SELECT * FROM students JOIN department;

查询每一个学生和关联的学院

SELECT * FROM students JOIN department ON students.deptid = department.did
SELECT * FROM students s JOIN department d ON s.deptid = d.did

外连接查询

左外连接

INSERT INTO department (dname) VALUES ("理工学院")
INSERT INTO students (sname) VALUES ("小测")

SELECT * FROM students LEFT JOIN department ON students.deptid = department.did;

右外连接

SELECT * FROM students RIGHT JOIN department ON students.deptid = department.did;

查询所有学生的名字以及学生档案信息

SELECT * FROM students s LEFT JOIN studetail stu ON s.sid=stu.ssid;

查询2学生的名字以及学生档案信息

SELECT * FROM students AS s LEFT JOIN studetail AS stu ON s.sid=stu.ssid WHERE s.sid = 2;

主表数据尽量用小表

""" 查询课程id是1001的所有学生档案信息"""

自链接查询

当前表自身和自身进行关联查询 自链接查询 表名必须取别名

SELECT 字段名称 FROM 表A 别名 A JOIN 表A 别名 B ON 条件

查询员工名和上级名

SELECT A.empname "上级名",B.empname "下属名" FROM emp as A JOIN emp as B ON A.id = B.managerid

UNION [ALL]全连接查询 吧多张表的查询结果合并

UNION ALL 会有重复数据

UNION 没有重复

多张表的字段必须保持一致

查询员工表 薪资大于5000的

SELECT * FROM emp WHERE salary > 5000;

查询员工表 年龄小于30的

SELECT * FROM emp WHERE empage < 30;

SELECT * FROM emp WHERE salary > 5000
UNION
SELECT * FROM emp WHERE empage < 30;

三表链接查询

查询所有的课程以及选了该课程的学生的学生名字

SELECT * FROM 表1
LEFT JOIN 表2 ON 表1的什么 = 表2的什么
LEFT JOIN 表3 ON 表2的什么 = 表3的什么

查询学生的课程id

SELECT sc.c_id FROM students as s
JOIN stucourse as sc ON s.sid = sc.s_id;

查询课程表关联的学生id

SELECT sc.s_id FROM course as c
JOIN stucourse as sc ON c.cid = sc.c_id;

查询所有的课程以及选了该课程的学生的学生名字

SELECT sc.c_id,sc.s_id,s.sname,c.cname FROM students as s
JOIN stucourse as sc ON s.sid = sc.s_id
JOIN course as c ON c.cid = sc.c_id;

查询课程id是1004的课程名称,以及选了该课程的学生的学生名字

SELECT sc.c_id,sc.s_id,s.sname,c.cname FROM students as s
JOIN stucourse as sc ON s.sid = sc.s_id
JOIN course as c ON c.cid = sc.c_id
WHERE c.cid = 1004;

查询18岁的所有学生以及课程名

学生表和学生详情表关联查询

SELECT * FROM students s JOIN studetail stu ON s.sid = stu.ssid;

学生表和中级表关联查询

SELECT * FROM students s JOIN stucourse sc ON s.sid = sc.s_id;

课程表和 中级表关联查询

SELECT * FROM course c JOIN stucourse sc ON c.cid = sc.c_id;

WHERE stu.stuage>18

SELECT s.sname,stu.stuage,c.cname FROM students s
JOIN studetail stu ON s.sid = stu.ssid
JOIN stucourse sc ON s.sid = sc.s_id
JOIN course c ON c.cid = sc.c_id
WHERE stu.stuage>18;

子表查询

标量子查询 子查询结果必须为单值

查询105学院的学生信息

SELECT deptid FROM students WHERE deptid = 105;

查询学院表id是105的学院名称

SELECT dname FROM department WHERE did = 105;

查询 理工学院的学生

SELECT dname FROM department WHERE did = (
SELECT deptid FROM students WHERE deptid = 105)

SELECT dname FROM department d JOIN
students s ON s.deptid= d.did
WHERE d.dname = "理工学院"

列子查询

可以是多行数据

查询清华大学和 上海交通大学的学生

查询学院是 清华大学和 上海交通大学 看看学院id是多少

SELECT did FROM department WHERE dname = "清华大学" or dname = "上海交通大学";

查询学生表

SELECT * FROM students WHERE deptid in (
SELECT did FROM department WHERE dname = "清华大学" or dname = "上海交通大学");

行子查询

子查询结果一行(但是可以是多列)

查询 员工"赵六"的薪资和上级领导相同的员工信息

+----+-----------+--------+--------------------+---------+------------+-----------+
| id | empname | empage | job_position | salary | hire_date | managerid |
+----+-----------+--------+--------------------+---------+------------+-----------+
| 1 | 张三 | 51 | 总经理 | 8000.00 | 2020-01-15 | 0 |
| 2 | 李四 | 42 | 开发部门经理 | 7000.00 | 2021-06-22 | 1 |
| 3 | 王五 | 33 | 开发组长 | 5500.00 | 2022-08-05 | 2 |
| 4 | 赵六 | 28 | 开发 | 4500.00 | 2019-03-10 | 3 |
| 5 | 钱七 | 35 | 开发 | 4500.00 | 2018-12-01 | 3 |
| 6 | 孙八 | 46 | 销售部门经理 | 6000.00 | 2020-09-17 | 1 |
| 7 | 周九 | 23 | 销售 | 5500.00 | 2021-04-25 | 6 |
| 8 | 吴十 | 21 | 开发 | 4500.00 | 2022-11-30 | 3 |
| 9 | 郑十一 | 30 | 市场 | 6200.00 | 2019-07-15 | 6 |
| 10 | 王十二 | 32 | 销售 | 5500.00 | 2020-10-20 | 6 |
| 11 | 王十三 | 32 | 销售 | 5500.00 | 2020-10-20 | NULL |
+----+-----------+--------+--------------------+---------+------------+-----------+

查询薪资是4500 部门id 3的员工信息

SELECT * FROM emp WHERE salary = 4500 and managerid = 3;

查询赵六的薪资和部门id

SELECT salary,managerid FROM emp WHERE empname = "赵六";

查询薪资是4500 部门id 3的员工信息

SELECT * FROM emp WHERE (salary,managerid ) = (4500,3);

SELECT * FROM emp WHERE (salary,managerid ) =
(SELECT salary,managerid FROM emp WHERE empname = "赵六")

表子查询

子查询结果是一个表 (多行多列)

查询所有的课程以及选了该课程的学生的学生名字

SELECT sc.c_id,sc.s_id,s.sname,c.cname FROM students as s
JOIN stucourse as sc ON s.sid = sc.s_id
JOIN course as c ON c.cid = sc.c_id;

SELECT * FROM students s
JOIN (SELECT * FROM stucourse as sc JOIN course c ON sc.c_id = c.cid ) as csc
ON csc.s_id =s.sid;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808357.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌收录批量查询,谷歌收录批量查询的方法步骤

谷歌收录批量查询是网站管理员和SEO专家常用的一种方法,用于同时查询多个页面或网站在谷歌搜索引擎中的收录情况。以下是几种常见的谷歌收录批量查询方法及其步骤: 一、使用Google Search Console(谷歌搜索控制台) 虽然Google Search Console主要面向单个网站的监控和管理,…

怎么查看网站是否被谷歌收录,查看网站是否被谷歌收录的快速检测方法

查看网站是否被谷歌收录,有多种快速检测方法可供选择。以下是一些常用的方法: 一、使用“site:”指令 打开谷歌搜索引擎:在浏览器中打开Google.com,确保使用的是谷歌的官方搜索引擎。 输入查询指令:在搜索框中输入“site:”加上你的网站域名(注意使用英文状态下的冒号,并…

10 月 4 日 S 组 风 雨 大 作

智障行为+2T1 T2 T3 T40 0 0 0好吧至少下一次不会考更低了 T1 你有个 n 个点 m 条边的无向图,每条边都有红蓝两种颜色中的一种,保证红色的边形成了这个图的一个生成树。 你希望给这些边赋上边权,保证边权是 1 ∼ m 的排列,使得红色的边是最小生成树。 希望这些边权形成的序…

南沙C++信奥赛陈老师解一本通题: 1828:【02NOIP提高组】均分纸牌

​【题目描述】有n堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为nn的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为n−1的堆上;其他堆上取的纸…

反射容斥

好久没写了呃呃呃……反射容斥恋のうた あとどれくらいの距離を 月へ歩いたら あとどれくらいの 寒い夜を重ねたら あとどれくらいの さよならを流したら まぶたの奥の泉が枯れ果てるとか 千年後もきっと続くだろう そう思ってた空洞を 満たしてあふれてしまうほどの この気持ち…

快乐数学5虚数

5 虚数 虚数总是让我感到困惑:这是一个数学抽象概念,方程是可处理它。 大学才会用到它。我们将用我们最喜欢的工具来攻克这个课题:关注关系,而非机械公式。 将复数视为数字系统的升级,就像零、小数和负数一样。 使用直观的图表,而不仅仅是文字,来理解概念。5.1 真正理解负…

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog…

冲刺 CSP 联训模拟 2

T1 挤压 概率期望,二进制拆位 看到异或想到拆位算贡献 \[\begin{aligned} ans&=\sum_xx^2P(x)\\ &=\sum_x(b_1+b_2+...+b_{30})^2P(x)\ \ \ (b_i表示\ x\ 二进制下\ i\ 位的值)\\ &=\sum_x(b_1b_1+b_1b_2+. . .b_{30}b_{29}+b_{30}b_{30})P(x)\\ &=\sum_i^{30…

智慧园区管理原型

智慧园区管理系统的构建是一个复杂而系统的工程,它融合了信息化、AI、物联网等多种先进技术,旨在提升园区的管理效率、服务质量以及企业运营效率。 一、明确系统目标和需求 需求收集与分析:首先,需要对园区的实际需求进行全面分析,包括园区类型(如产业园区、办公园区、住…

读数据湖仓07描述性数据

读数据湖仓07描述性数据1. 描述性数据 1.1. 基础数据中包含不同类型的数据,而不同类型数据的描述性数据也存在显著的差异 1.2. 尽管这些描述性数据存在根本性的差异,但通过描述性数据,我们可以全面了解基础数据中的数据 1.3. 通过分析基础设施中提供的描述性数据可以获得更详…

探索JVM的堆内存分布:官方图片展示

序章 截取Java官方的 堆内存分布相关图片 到本文。Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide Java 21 https://docs.oracle.com/en/java/javase/21/gctuning/preface.html下载为 pdf,搜索 Figure,截取其中的 堆内存分布相关…

快乐数学3勾股定理延伸

3 勾股定理延伸 我们一直低估了勾股定理。上一章表明它适用于任何有平方项的公式。 3.1 理解该定理在任意直角三角形中如果 a=3 和 b=4,那么 c=5。很简单吧?那么,关键的一点是 a 和 b 成直角(注意小红框)。一个方向的移动对另一个方向没有影响。 这有点像南北与东西的关系…