• SQL结构化查询语句


    SQL结构化查询语句

    SQL定义了查询所有关系型数据库的规则。

    1、通用语法

    • SQL语句可以单行或者多行书写,以分号结尾
    • 可以使用空格和缩进增强可读性
    • 不区分大小写,但是关键字建议大写
    • 3种注释
      • 注释内容;多行注释/*;-- 注释内容

    2、SQL分类

    • DDL(Date Definition Language)数据定义语言
      • 用来定义数据库对象:数据库、表、列等,包括关键字:create,drop、alte
    • DML(Data Manipulation Language)数据操作语言,增删改
      • 用来对数据库的表中的数据进行增删查改。关键字:insert、delete、update
    • DQL(Date Query Language)数据查询语言,查
      • 用来查询数据库表中的记录。关键字:select、where
    • DCL(Data Control Language)数据控制语言
      • 用来定义数据库的访问权限,安全级别,以及创建用户,关键字:GRANT、REVOKE

    3、DDL操作数据库、表

    1. 操作数据库:CRUD

      • C(create)创建
      SQL语句 描述
      CREATE database (if not exists) 数据库名 (character set 字符集名称); 创建一个新的数据库,括号是一个判断是否存在、设定该数据库的字符集
      • R(Retrieve)查询:
      SQL语句 描述
      show databases; 查看所有的数据库名称
      show create database 数据库名; 查看某个数据库的创建语句
      • U(Update)修改
      SQL语句 描述
      alter database 数据库名 character set 字符集名称; 修改数据库使用的字符集
      • D(Delete)删除,使用前三思
      SQL语句 描述
      drop database (if exits )数据库名; 判断存在就删除数据库
      • 查询当前在使用的数据库
      SQL语句 描述
      select database(); 查询当前在使用的数据库
      • 使用数据库
      SQL语句 描述
      use 数据库名称 使用某个数据库

      2、操作数据库表

      • C(create)创建

        语法

        create table 表名称(
            列名1 数据类型1,
            列名2 数据类型2,
            列名3 数据类型3,
            ...
            列名n 数据类型n
        ); # 最后一列不要加逗号,分号等,分号是结束标志
        

        其他创建表语句create table table1_copied like table1,创建一个表,复制table1

        数据类型:

        数据类型 描述
        int 整数
        double(n, m) 浮点数类型,指定一共有n位,小数点后保留m位
        date 日期类型,只包含年月日,yyyy-MM-dd
        datetime 日期时间类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
        timestamp 时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss,如果将来不给这个字段赋值为null,就自动使用系统时间
        varchar(n) 字符串类型,要指定最大为n个字符
      • R(Retrieve)查询,进到某个数据库后

        SQL语句 描述
        show tables; 查看该数据库所有的表
        desc 表名称; 查询一个表的表结构,有什么字段,字段类型,是否主键等信息
      • U(Update)修改

        • 修改表名:alter table 表名称 rename to 新表名称;
        • 修改表的字符集:alter table 表名称 character set 字符集名称;
        • 修改列名,数据类型:
          • alter table 表名称 change 列名称 新列名称 新数据类型;
          • alter table 表名称 modify 列名称 新数据类型;
        • 删除列:alter table 表名称 drop 列名称;
        • 添加列:alter table 表名称 add 列名称 数据类型;
      • D(Delete)删除表

        SQL语句 描述
        drop table (if exists) 表名称 删除表,如果表存在

    4、DML:操作表中的数据

    1. 添加数据

      • 语法:insert into 表名称(列名1, 列名2.....列名n) values(值1, 值2......值n)

        注意

        • 列名和值要一一对应
        • 如果不写列名,就默认要给所有列添加数据
        • 除了数字类型,其他类型都要用引号引起来
    2. 删除数据

      • 语法:delete from 表名 [where 条件]

        注意

        • delete from 表名:不写条件,就删除表中所有的数据
        • TRUNCATE TABLE 表名:先删除表,再创建一张一样的空表,推荐使用这个语句删除所有记录
    3. 修改数据

      • 语法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件]

    5、DQL:查询表中的数据

    1. DQL查询语句

      1. select * from 表名称:查询一个表的全部数据

      2. 排序查询,语法:order by 句子

        • order by 排序字段1 排序方式1, 排序字段2 排序方式2,......;这里的意思是,首先按照排序方式一,如果方式一一样,那么使用方式二排序;(也就是只有第一种方式一样时,才会判断第二种方式)

          注意:排序方式:

          升序:ASC;降序:DESC

          select * from student order by age DESC;(按照年龄降序排序)

      3. 聚合函数,将一列数据作为一个整体,进行纵向的计算。

        • count:计算个数select count(列名称) from 表名称
        • 注意:聚合函数排除了空的(NULL)的行,解决方法
          • 替换NULL值的方法:select count(ifNULL(name, " ")) from student;
          • 尽量使用统计的列不要有空值的类,一般是主键
          • 使用count(*)
        • max:计算最大值select max(列名) from 表名
        • min:计算最小值select min(列名) from 表名
        • sum:求和select sum(列名) from 表名
        • avg:计算平均值select avg(列名) from 表名
      4. 分组查询:统计具有相同特征的

        语法:group by 字段 select sex, avg(age), count(id), min(age) from student group by sex;

        注意

        • 分组之后只能查询的字段,只有分组字段和聚合函数
        • where 在分组之前限定,如果不满足条件,就不参与分组;having是在分组之后进行限定,如果不满足条件就不会被查询出来
        • where后不可以跟聚合函数,having后可以进行聚合函数的判断
          • select sex, avg(age), count(id), min(age) from student where age > 20 group by sex having count(id) <= 2;
          • 一般可以在聚合函数后写一个别名,这样就可以在判断的时候使用别名
            • select sex, avg(age), count(id) peopleCount, min(age) from student where age > 20 group by sex having peopleCount <= 2;

        分页查询

        • 语法:limit 开始的索引,每页查询的条数

        • 公式:开始的索引 = (当前的页码 - 1) × 每页显示的条数

        • 分页操作是每个数据库的操作方法是不一样的,limit关键字只是在MySQL可以使用,其他关系型数据库有自己的语法

    6、基础查询

    • 多字段查询语法:SELECT 字段1, 字段2, ... FROM table;
    • 去重:SELECT DISTINCT sex from student;
    • 计算:自己写一个字段参与参与查询:SELECT name, math, english, (math + english) FROM student;
      • 注意:如果有NULL参与计算,结果都为NULL,可以使用函数IFNULL()解决:IFNULL(English, 0)。意思是如果English这一列的值有NULL,就用0替代参与计算
    • 别名:可以给自己写的列起一个别名,使用关键字AS(可以省略):SELECT name, ifnull(math, 0) + english AS 总分 FROM student;

    7、条件查询

    1. 关键字WHERE后面跟着条件

    2. 运算符:

      运算符 描述
      <, >, =, !=, <=, >= 不等于可以使用!=或者<>, 没有==
      BETWEEN ... AND 相当于使用 AND连接条件
      IN(集合) 相当于使用OR连接条件
      IS NULL NULL值不能使用=判断,要使用IS或者 IS NOT
      LIKE
      SELECT * FROM student WHERE math > 60;
      
      SELECT * FROM student WHERE math > 90 AND math <= 92;
      SELECT * FROM student WHERE math BETWEEN 90 AND 92;
      
      SELECT * FROM student WHERE math = 90 OR math = 92;
      SELECT * FROM student WHERE math IN (90, 92, 100);
      
      SELECT * FROM student WHERE math is NULL;-- NULL要使用关键字 IS判断
      SELECT * FROM student WHERE math IS NOT NULL;-- NULL要使用关键字 IS判断
      
    3. 模糊查询

      LIKE

      占位符:%(任意多个字符),_(单个任意字符)

      SELECT * FROM student WHERE name LIKE '____'; -- name 是四个字符的人
      SELECT * FROM student WHERE name LIKE '孙%'; -- 第一个字是孙的人
      SELECT * FROM student WHERE name LIKE '%八%'; -- 中间有八字的人
      SELECT * FROM student WHERE name LIKE '_八%';-- 第二个子是八的人	
      
  • 相关阅读:
    AtCoder Grand Contest 032-B
    AtCoder Grand Contest 032 A
    高橋君とカード / Tak and Cards AtCoder
    Divisibility by 25 CodeForces
    Fire Again CodeForces
    cctype函数 (字符类型判断)
    蓝桥杯--- 历届试题 国王的烦恼 (并查集)
    蓝桥杯---买不到的数目
    算法课(经典贪心)
    完美的数字
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10686791.html
Copyright © 2020-2023  润新知