SQL语法基础

结构化查询语言(Structured Query Language):是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

数据查询语言(DQL):SELECT(查询)

数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)

一、常见的MySql的数据类型:

文本:varchar、text、longtext

数字:int、tinyint、bigint、float、double

日期:date(2021-07-15)、datetime(2021-11-03 15:31:05)

二、SQL常见语法


1、训练数据集,共四个表文件Course、Student、Score、Teacher

 

2、INSERT语法:在表文件中插入数据

INSERT INTO 表名称 VALUES(值1,值2,……);

INSERT INTO 表名称(列1,列2,……)

VALUES(值1,值2,……),(值1,值2,……),……;

注:关键字之间要有空格,如果不是多条语句同时执行,语句后的分号(;)可以省略

3、DELETE语法:删除表文件中部分数据

DELETE FROM 表名称

(WHERE 列名称 = 值)

4、UPDATE语法:修改表文件中数据

UPDATE 表名称

SET 列名称1 = 新值,

           列名称2 = 新值,

           ……

WHERE 列名称 = 某值

5、SELECT语法:查询语句

整体语法:SELECT 列名称1 AS 列1,

                       列名称2 AS 列2,

                       ……

FROM 表名称

(WHERE 列名称 = 某值

ORDER BY 列名称 ASC/DESC

LIMIT 数字1,数字2 )

示例:

SELECT s_id AS '学号',

                 s_name,

                 s_birthday,

                 s_sex

FROM student

WHERE s_id < 5

6、WHERE条件

(1)AND 和 OR

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

示例:

查询生日为1993年3月5日的男学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_sex = '男' AND s_birthday = '1993-03-05’

查询生日为1993年3月5日或者性别为男的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_sex = '男' OR s_birthday = '1993-03-05'

 

(2)LIKE(模糊查询)

通配符:

% :替代 0 个或多个字符

_ :替代一个字符

示例:

查询姓李的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE '李%'

查询生日为1993年3月5日且姓李的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE '李%' AND s_birthday = '1993-03-05’

查询姓名为两个字且姓为王的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE ‘王_’

(3)BETWEEN …… AND ……

BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值或者日期。

示例:

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id BETWEEN 3 AND 6( 包含3和6)

 

查询生日在1993年1月1日到1993年12月31日之间的学生信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_birthday BETWEEN '1993-01-01' AND '1993-12-31'

 

(4)<,>,<>,>=,<=

< 小于

> 大于

<>(!=) 不等于

>= 大于等于

<= 小于等于

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id >=3 AND s_id <=6

(5)IN

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id IN (3,4,5,6)

综上,查询s_id在3到6之间的学生信息共列举了三种取值条件,输出结果均相同。

7、多表查询—LEFT JOIN…… ON…… 和 RIGHT JOIN…… ON ……

LEFT JOIN:从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行

RIGHT JOIN:与LEFT JOIN 相反,会从右表 (table_name2) 那里返回所有的行,

即使在左表 (table_name1) 中没有匹配的行。

示例1:同时查询score及student两个表的数据,保留score全部行

(1)SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM score

LEFT JOIN student

ON score.s_id = student.s_id

(2)SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM student

RIGHT JOIN score

ON score.s_id = student.s_id

示例2:查询c_id为1的学生的成绩和科目名称

SELECT b.s_id,b.s_name,a.c_name,b.s_score

FROM course a RIGHT JOIN (

SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM score

LEFT JOIN student

ON score.s_id = student.s_id WHERE c_id = 1) b

ON a.c_id = b.c_id

8、ORDER BY—排序

根据某一列的信息进行正序或倒序排序默认

ASC:从小到大排序(升序排列),一般可以省略

DESC:从大到小排序(降序排列)

示例:按照生日正序排序:

SELECT *

FROM student

ORDER BY s_birthday (ASC)

 

按照生日倒序排序:

SELECT *

FROM student

ORDER BY s_birthday DESC

9、LIMIT—分页

LIMIT num1,num2:

从num1开始,num1最小为0,查询num2条数据

如果从头开始,第一个数字可以省略

示例:按照生日正序排序查询前三人的信息:

SELECT * FROM student ORDER BY s_birthday  LIMIT 3

SELECT * FROM student ORDER BY s_birthday  LIMIT 0,3

按照生日倒序排序取第三个人到第五个人的信息:

SELECT *

FROM student

ORDER BY s_birthday DESC LIMIT 2,3

10、常用数学函数

COUNT():求数量

SUM():求和

AVG():求平均值

MAX():求最大值

MIN():求最小值

示例:求参加课程号为2的学生数量:

SELECT COUNT(*)

FROM score

WHERE c_id =2

 

求课程号为2的成绩总分:

SELECT SUM(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的平均分:

SELECT AVG(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的最高分:

SELECT MAX(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的最低分:

SELECT MIN(s_score)

FROM score

WHERE c_id =2

 

GROUP BY:结合聚合函数,根据一个或多个列对结果集进行分组

HAVING:HAVING 子句可以让我们筛选分组后的各组数据

SELECT 列名称1 AS 列1,

          列名称2 AS 列2,

          ……

FROM 表名称

(WHERE 列名称 = 某值)

GROUP BY 列名称1

HAVING 条件

示例:获取每个科目的平均分:

SELECT c_id,AVG(s_score)

FROM score

GROUP BY c_id

获取平均分在66分以上的科目ID和平均分:

SELECT c_id,AVG(s_score)

FROM score

GROUP BY c_id

HAVING AVG(s_score)>66

 

11、常用日期函数

NOW():当前日期和时间

CURDATE():当前日期

CURTIME():当前时间

DATE_FORMAT(date,format):时间格式化

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')

 SELECT DATE_FORMAT(NOW(), ‘%Y/%m/%d %H:%i:%s')


SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s')

 

三、注意事项

1、关键字不区分大小写,包括SELECT等价于select,LIKE等价于like,COUNT()等价于count()

2、所有的符号都是英文符号,包括不限于:, ( ) ; % ! ‘ “

3、文本和日期类型的数据,前后需要加单引号,比如 …… WHERE s_sex = ‘男’

4、别名:字段取别名时可以加AS或者不加,以空格间隔,表名取别名时只能以空格间隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值