码迷,mamicode.com
首页 > 数据库 > 详细

MySQL(一)基本查询

时间:2018-08-07 16:48:07      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:size   name   表达   技术分享   使用   img   join   insert   南京   

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 列名 
     WHENTHEN[ ...n ]
     ELSEEND

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

          实例:

          查询男性年龄大于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

技术分享图片

 

 

 

 

MySQL(一)基本查询

标签:size   name   表达   技术分享   使用   img   join   insert   南京   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!