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 '_八%';-- 第二个子是八的人

SQL结构化查询语句的更多相关文章

  1. ORACLE结构化查询语句

  2. ElasticSearch(6)-结构化查询

    引用:ElasticSearch权威指南 一.请求体查询 请求体查询 简单查询语句(lite)是一种有效的命令行_adhoc_查询.但是,如果你想要善用搜索,你必须使用请求体查询(request bo ...

  3. elasticsearch结构化查询过滤语句-----4

    1.之前三节讲述的都是索引结构及内容填充的部分,既然添加了数据那我们的目的无非就是增产改查crudp,我先来讲讲查询-----结构化查询 我们看上图截图两种方式: 1)第一种,在索引index5类型s ...

  4. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  5. ElasticSearch权威指南学习(结构化查询)

    请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...

  6. ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询

    基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...

  7. SQL结构化查询语言

    一.SQL 结构化查询语言 1.T-SQL 和 SQL的关系 T-SQL是SQL的增强版 2.SQL的组成 2.1 DML (数据操作语言) 增加,修改,删除等数据操作 2.2 DCL (数据控制语言 ...

  8. SQL 结构化查询语言

    SQL 结构化查询语言 一.数据库的必要性: >>作用:存储数据.检索数据.生成新的数据 1)可以有效结构化存储大量的数据信息,方便用户进行有效的检索和访问. 2)可以有效地保持数据信息的 ...

  9. SQL Server-简单查询语句,疑惑篇(三)

    前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开始正 ...

随机推荐

  1. 25 Zabbix系统数据表结构介绍

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 25 Zabbix系统数据表结构介绍 自学Zabbix之路15.1 Zabbix数据库表结构简单解 ...

  2. 【BZOJ3215/3216】[ZJOI2013]话旧/话旧2(组合数学,动态规划)

    [BZOJ3215/3216][ZJOI2013]话旧/话旧2(组合数学,动态规划) 题面 BZOJ3215 BZOJ3216 题解 先解决\(3216\),求的是最小值为\(0\). 因为起点就是\ ...

  3. kafka清理数据日志

    背景问题: 使用kafka的路上踩过不少坑,其中一个就是在测试环境使用kafka一阵子以后,发现其日志目录变的很大,占了磁盘很大空间,定位到指定目录下发现其中一个系统自动创建的 topic,__con ...

  4. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  5. bzoj2086 Blocks

    题目链接 题面 思路 可以发现其实就是询问一个最长的区间,使得这个区间的平均数大于等于k.所以将区间内所有数字减去k,然后做一遍前缀和.只要是前缀和之差大于等于0的区间.就是满足条件的. 所以现在问题 ...

  6. 【洛谷 P1616 疯狂的采药】

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...

  7. px转换成bp单位的工具函数

    import {Dimensions} from 'react-native' //当前屏幕的高度 const deviceH = Dimensions.get('window').height // ...

  8. express框架学习笔记

    用express框架也有一段时间了,下面我总结一下我做项目时迷惑的点: app.use()与app.get()的区别 app.use()是用来为应用程序绑定中间件的,当第一个参数是path是,第二个参 ...

  9. spring+shiro共享session完整小例子

    之前写过一个,只不过那个不单纯,有人跑不通,所以今天整个纯粹的小例子. 要求你有Redis. 源码 GitHub 目录结构 因为这是个例子,仅仅为了体现共享session,所以权限认证部分没有加入处理 ...

  10. node(基础)_node中的javascript

    一.前言                                                                                                 ...