乐趣区

关于sql: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 或者不加,以空格距离,表名取别名时只能以空格距离

退出移动版