SQL基础知识整理

本文是对SQL相关内容的一个梳理。首先SQL语言的分类主要有四大类web

DDL数据定义语言:

关键字有CREATE、ALERT、DROP建立一个新的表或者表的视图或者对象;数据库

  • 操做数据库
    建立:create database mydb2 character set gbk COLLATE gbk_chinese_ci;
    查询:show create database mydb2;
    修改:alter database mydb2 character set utf8;
    删除:drop database mydb2;
    其余:select database(); //查看当前使用的数据库
    use mydb3; //切换使用的数据库
  • 操做数据表
    语法:
    create table 表名(
    字段1 字段类型,
    字段2 字段类型,

    字段n 字段类型
    );

DML数据操做语言:

主要有INSERT、UPDATE、DELETE对应对表中的数据进行增,改,删除;svg

  • 插入操做:
    语法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…);
    注意:列名与列值的类型、个数、顺序要一一对应;
    值不要超出列定义的长度
    若是插入空值,请使用null
    插入的日期和字符同样,都使用引号括起来。
  • 修改操做:
    语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
  • 删除操做:
    语法 : DELETE FROM 表名 [WHERE 列名=值]

DCL数据控制语言:

用于授予或收回数据库的某些权限或事务提交。
GRANT:受权;ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。函数

DQL数据查询语言:

由SELECT子句WHERE子句FROM子句构成的查询块。
数据查询语言不会修改数据,而是将查询的结果集返回到客户端。
语法:
SELECT selection_list /*要查询的列名称 */
FROM table_list /*要查询的表名称 */
WHERE condition /*行条件 */
GROUP BY grouping_columns /*对结果分组 */
HAVING condition /*分组后的行条件 */
ORDER BY sorting_columns /*对结果分组 */
LIMIT offset_start, row_count /*结果限定 */xml

基础查询

  • 查询全部列 SELECT * FROM stu;
  • 查询指定列 SELECT sid, sname, age FROM stu;

条件查询

条件查询即再WHERE子句中,同时WHERE子句中能够使用以下关键字:对象

  • =、!=、<>、<、<=、>、>=;
  • BETWEEN…AND;
  • IN(set);
  • IS NULL; IS NOT NULL;
  • AND;OR;NOT;
    eg:
    查询性别为女,而且年龄50的记录
    SELECT * FROM stu WHERE gender=‘female’ AND ge<50;
    查询学号为S_1001,S_1002,S_1003的记录
    SELECT * FROM stu WHERE sid IN (‘S_1001’,‘S_1002’,‘S_1003’);

模糊查询

当想查询姓名中包含a字母的学生时就须要使用模糊查询了。模糊查询须要使用关键字LIKE。其中通配符有:排序

  • _ 任意一个字符 ‘张_’
  • %:任意0~n个字符 ‘%张%’

字段控制查询

  • 去重:DISTINCT关键字
    SELECT DISTINCT sal FROM emp;
  • 查询某几列的和:这几列都是数值类型的时候能够相加
    SELECT *,sal+comm FROM emp;
  • 添加别名: as关键字

聚合函数

用来作纵向运算的函数事务

  • COUNT():统计指定列不为NULL的记录行数;
    MAX():计算指定列的最大值,若是指定列是字符串类型,那么使用字符串排序运算;
  • MIN():计算指定列的最小值,若是指定列是字符串类型,那么使用字符串排序运算;
  • SUM():计算指定列的数值和,若是指定列类型不是数值类型,那么计算结果为0;
  • AVG():计算指定列的平均值,若是指定列类型不是数值类型,那么计算结果为0;

分组查询

当须要分组查询时须要使用GROUP BY子句,例如查询每一个部门的工资和,这说明要使用部门来分组。ci

  • GROUP BY子句
    查询每一个部门的部门编号和每一个部门的工资和:
    SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;
  • HAVING子句
    查询工资总和大于9000的部门编号以及工资和:
    SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;

LIMIT

SELECT * FROM emp LIMIT x, y;
从x行起查询y行记录。字符串

查询语句书写顺序:select – from- where- group by- having- order by-limit 查询语句执行顺序:from - where -group by - having - select - order by-limit