MySQL(一)基本查询

MySQL(一)基本查询

场景:学生信息系统,包括学生信息、教师信息、专业信息和选课信息。

建表语句 :

-- 学生信息表
DROP TABLE IF EXISTS Students;
CREATE TABLE Students(
    Student_ID INT PRIMARY KEY NOT NULL,
    Student_Name NVARCHAR(50),
    Student_Age INT,
    Student_Sex  INT,
    Student_City NVARCHAR(50),
    Student_MajorID INT
);

-- 专业信息表
DROP TABLE IF EXISTS Majors;
CREATE TABLE Majors(
    Major_ID INT PRIMARY KEY NOT NULL,
    Major_Name NVARCHAR(50)
);

-- 课程信息表
DROP TABLE IF EXISTS Courses;
CREATE TABLE Courses(
    Course_ID INT PRIMARY KEY NOT NULL,
    Course_Name NVARCHAR(50)
);

-- 选课信息表
DROP TABLE IF EXISTS SC;
CREATE TABLE SC(
    SC_ID INT PRIMARY KEY NOT NULL,
    SC_StudentID INT,
    SC_CourseID INT,
    SC_Score INT
);
  

插入数据语句:

-- 插入学生信息
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40001,‘李煜‘,18,1,‘南京‘,1001);
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40002,‘唐云‘,20,1,‘杭州‘,1002);
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40003,‘吴广‘,19,1,‘南京‘,1001);
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40004,‘刘云宇‘,18,1,‘武汉‘,1003);
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40005,‘王梦琦‘,17,0,‘北京‘,1004);

-- 插入专业信息
INSERT INTO Majors (Major_ID,Major_Name) VALUE(1001,‘软件工程‘);
INSERT INTO Majors (Major_ID,Major_Name) VALUE(1002,‘土木工程‘);
INSERT INTO Majors (Major_ID,Major_Name) VALUE(1003,‘信息安全‘);
INSERT INTO Majors (Major_ID,Major_Name) VALUE(1004,‘工商管理‘);

-- 插入课程信息
INSERT INTO Courses (Course_ID,Course_Name) VALUE (1001,‘高等数学‘);
INSERT INTO Courses (Course_ID,Course_Name) VALUE (1002,‘大学英语‘);
INSERT INTO Courses (Course_ID,Course_Name) VALUE (1003,‘数据结构‘);
INSERT INTO Courses (Course_ID,Course_Name) VALUE (1004,‘结构力学‘);
INSERT INTO Courses (Course_ID,Course_Name) VALUE (1005,‘日语‘);

-- 插入选课信息
INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100001,40001,1001,2);
INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100002,40001,1002,3);
INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100003,40002,1001,2);
INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100004,40003,1003,3);
INSERT INTO SC (SC_ID,SC_StudentID,SC_CourseID,SC_Score) VALUE(100005,40004,1004,2);

1.基础查询

作用:查询某数据表中的某些数据列的数据

语法:

SELECT 列名1,列名2,列名N FROM 表名

实例:

1.查询学生信息表中的ID,年龄,性别。

SELECT Student_ID,Student_Name,Student_Sex FROM Students;

2.条件查询

作用:

查询某数据表中的某些数据列的数据

语法:

SELECT 列名1,列名2,列名N FROM 表名 WHERE 列名 运算符  值

主要运算符

运算符 描述
 =  等于
<> 或 !=  不等于 
< 小于 
<=  小于等于 
> 大于
>= 大于等于
BETWEEN......AND...... 在某个范围内
IS NULL 为NULL
AND 并且
OR 或者
IN
NOT

LIKE 模糊查询
REGEXP 正则表达式

主要通配符

通配符 描述
 _  匹配单个字符
% 匹配任意个字符
. 匹配任意单个字符 
[] 匹配[]中的任意一个字符
* 匹配零个或多个在它前面的东西
^ 以什么开始
$ 以什么结尾

实例:

1.查询学生信息表中年龄为18的学生信息。

SELECT*FROM Students WHERE Student_Age = 18;

2.查询学生信息表中年龄不为18的学生信息。

SELECT*FROM Students WHERE Student_Age <> 18;

3.查询学生信息表中年龄小于18的学生信息。

SELECT*FROM Students WHERE Student_Age < 18;

4.查询学生信息表中年龄小于等于18的学生信息。

SELECT*FROM Students WHERE Student_Age <= 18;

5.查询学生信息表中年龄大于18的学生信息。

SELECT*FROM Students WHERE Student_Age > 18;

6.查询学生信息表中年龄大于等于18的学生信息。

SELECT*FROM Students WHERE Student_Age >=18;

7.查询学生信息表中年龄17-19的学生信息。

SELECT*FROM Students WHERE Student_Age BETWEEN 17 and 19;

8.查询学生信息表中姓名为null的学生ID

SELECT Student_ID FROM Students WHERE Student_Name IS NULL;

9.查询来自于南京并且年龄为19的学生信息

SELECT * FROM Students WHERE Student_City = ‘南京‘ AND Student_Age = 19;

10.查询来自于南京或者武汉的学生信息

SELECT * FROM Students WHERE Student_City =‘南京‘ OR Student_City =‘武汉‘;

SELECT * FROM Students WHERE Student_City IN(‘南京‘,‘武汉‘);

11.查询姓名中不含有云的学生信息

SELECT * FROM Students WHERE Student_Name NOT LIKE‘%云%‘;

12.查询姓唐的同学信息

SELECT * FROM Students WHERE Student_Name REGEXP ‘^唐‘

 3.ORDER BY

作用:对需要查询后的结果集进行排序

标识 含义 说明
ASC 升序 默认
DESC 倒序  

实例:

1.查询学生信息表中的信息表并且按照年龄升序排列 如果年龄相同则按照ID降序排列

SELECT * FROM Students ORDER BY Student_Age,Student_ID DESC;

4.AS

作用:为表名或者列名指定别名

实例:

1.将结果列改为指定的名称

SELECT Student_Name AS ‘姓名‘,Student_Sex AS ‘性别‘,Student_Age AS‘年龄‘ FROM Students

2.使用表别名来查询李煜的选课信息

SELECT S.Student_ID,S.Student_Name,C.Course_Name,SC_Score
FROM (SELECT Student_ID,Student_Name FROM Students WHERE Student_Name = ‘李煜‘) AS S
LEFT JOIN SC ON S.Student_ID = SC_StudentID LEFT JOIN Courses AS C
ON SC_CourseID = C.Course_ID

5.DISTINCT

作用:查询结果去除重复的

语法:

-- 查重依据为 DISTINCT后的所有列名
SELECT DISTINCT 列名 FROM 表名
-- 查重依据为 GROUP BY后的所有列名
SELECT DISTINCT 列名 FROM 表名 GROUP BY 列名

实例:

1.查询学生表中的姓名和年龄并去除重复的

SELECT DISTINCT Student_name,Student_age FROM Students

2.查询学生表中的姓名和年龄并去除年龄重复的

SELECT DISTINCT Student_name,Student_age FROM Students GROUP BY Student_Age

6.GROUP BY

作用:根据指定的一个列或多个列对查询结果进行分组

实例:

1.查询专业分布情况

SELECT Student_MajorID,COUNT(Student_ID) FROM Students GROUP BY Student_MajorID

2.删除重复的学生信息,并保留最新的那条

-- 先插入两条重复的数据
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40007,‘沈鹏‘,17,0,‘大理‘,1004);
INSERT INTO Students (Student_ID,Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)
VALUES (40008,‘沈鹏‘,17,0,‘大理‘,1004);

DELETE FROM Students WHERE Student_ID NOT IN
(SELECT * FROM (SELECT MAX(Student_ID) FROM Students GROUP BY Student_Name,Student_Age,Student_Sex,Student_City,Student_MajorID)AS S)

 7.LIMIT

作用:LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数

语法:

-- 当LIMIT 后面的参数只有一个时为条数,而默认偏移量为0
SELECT 列名 FROM 表名 LIMIT 偏移量,条数 

实例:

1.查询学生信息表中年龄最大的三位同学的信息

SELECT * FROM Students ORDER BY Student_Age DESC LIMIT 3

2.查询年龄第二到第四的学生信息

SELECT * FROM Students ORDER BY Student_Age DESC LIMIT 1,4

8.HAVING

作用:having字句可以让我们筛选成组后的各种数据,一般而言就是可以在条件里面用聚组函数函数。

语法:

SELECT 列名 FROM 表名 GROUP BY 列名 HAVING 聚合函数 运算符 值

实例:

查询平均年龄大于18的专业ID和人数

SELECT Student_MajorID,COUNT(Student_ID)FROM Students GROUP BY Student_MajorID HAVING AVG(Student_Age) > 18

      9.CASE WHEN

作用:用于计算条件列表并返回多个可能结果表达式之一

语法:

-- 表达式语法
CASE 列名
     WHEN 值 THEN 值 [ ...n ]
     ELSE 值
END

-- 搜索式语法
CASE
     WHEN 布尔表达式 THEN 值 [ ...n ]
     ELSE 值
END

实例:

查询男性年龄大于18女性大于16的学生信息

SELECT * FROM Students WHERE CASE Student_Sex WHEN 1 THEN Student_Age>=19 WHEN 0 THEN Student_Age >=16 END

       分别统计男性女性中的成年未成年的人数

SELECT CASE Student_Sex WHEN 0 THEN ‘女‘ WHEN 1 THEN ‘男‘ END AS ‘性别‘,
SUM(CASE WHEN Student_Age >=18 THEN 1 ELSE 0 END) AS‘成年‘,
SUM(CASE WHEN Student_Age <18 THEN 1 ELSE 0 END) AS‘未成年‘
FROM Students GROUP BY  Student_Sex

原文地址:https://www.cnblogs.com/calpo/p/9430195.html

时间: 2024-10-13 02:07:01

MySQL(一)基本查询的相关文章

python3 mysql 多表查询

python3 mysql 多表查询 一.准备表 创建二张表: company.employee company.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male'

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

步步深入:MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQL Layer’,下层是各种各样对上提供接口的存储引擎,被称为‘Storage Engin

MySQL FROM 子查询

FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subquery) AS name ... 子查询会生成一个临时表,由于 FROM 子句中的每个表必须有一个名称,因此 AS name 是必须的.FROM 子查询也称为衍生数据表子查询. FROM 子查询实例 table1: s1 s2 1 5 2 12 3 20 FROM 子查询 SQL 如下: SELE

MySQL 表子查询

MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title content uid 1 文章1 文章1正文内容... 1 2 文章2 文章2正文内容... 1 3 文章3 文章3正文内容... 2 4 文章4 文章4正文内容... 3 blog 表: bid title content uid 1 日志1 日志1正文内容... 1 2 文章2 文章2正文内容... 1

MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engin

MySQL多表查询回顾

----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_customer c,t_linkman l where c.cid=l.clid /*内连接写法二(inner 可以省略不写)*/ select * from t_customer c inner join t_linkman l on c.cid=l.clid 2.左外连接 /*左外连接(outer 可以省

MySQL慢日志查询

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中.long_query_time的默认值为10,意思是运行10S以上的语句.默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响.慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表.

MySQL知识树-查询语句

在日常的web应用开发过程中,一定会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇文章我们就来一起看看MySQL查询知识相关的树是什么样的. MySQL查询知识树: 一.查询的种类 二.查询的原理 三.查询的应用场景 四.查询的效率比较 五.如何进行查询优化 六.与查询相关的知识扩展 一.查询的种类 MySQL的查询可以分为内连接查询.左连接查询.右连接查询.联合查询. ①内连接是通过关联表中共有的列来匹配出记录,查询出来的数据是

MySql开启慢查询

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”. 查看/设置“慢查询”的时间定义 1 mysql> show variables like "long%"; 2 +-----------------+----------+ 3 | Variable_name | Value | 4 +-----------------+----------+ 5 | long