在介绍SQL语句五种分类前,先来简单的认识一下SQL。SQL的英文全称为Structured Query Language,SQL用来和数据库打交道,完成和数据库的通信,SQL是一套标准,但是每一个数据库都有自己的特性,当使用这个数据库特性相关的功能,这时SQL语句可能就不是标准了,但是百分之九十以上的SQL都是通用的。
SQL语句的五种分类分别是DQL、DML、DDL、TCL和TCL,下面对SQL语句的五种分类进行列举:
1、数据库查询语言(DQL)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块,简称DQL,Data Query Language。代表关键字为select。
2、数据库操作语言(DML)
用户通过它可以实现对数据库的基本操作。简称DML,Data Manipulation Language。代表关键字为insert、delete 、update。
3、数据库定义语言(DDL)
数据定义语言DDL用来创建数据库中的各种对象,创建、删除、修改表的结构,比如表、视图、索引、同义词、聚簇等,简称DDL,Data Denifition Language。代表关键字为create、drop、alter。和DML相比,DML是修改数据库表中的数据,而 DDL 是修改数据中表的结构。
-- DDL
-- 创建数据库
CREATE DATABASE db02;
-- 选择使用数据库
USE db02;-- 针对当前会话的一个临时使用数据库
SELECT DATABASE();
-- 删除数据库
DROP DATABASE SDay1;
-- 创建表
CREATE TABLE stu(
stu_id INT PRIMARY KEY,-- 主键约束
stu_name VARCHAR(20) UNIQUE,-- 唯一约束
gender CHAR(1) DEFAULT '男',-- 默认值约束
address VARCHAR(100) NOT NULL,-- 非空约束
-- PRIMARY KEY(stu_id,stu_name)联合主键
birthday date
);
-- 查看字段列
DESC stu;
-- 删除表
DROP TABLE stu;
-- 删除表 先删除drop 再创建create
TRUNCATE TABLE stu;
SHOW TABLE;-- 查看当前数据库下的表
-- DML语句
-- 添加
-- INSERT INTO 表名(字段名...) value();
-- INSERT INTO 表名 value();
-- INSERT INTO 表名 values(),(),(),(),...;
INSERT INTO stu(stu_id,stu_name,address) VALUE(1001,'小王','黑龙江');
INSERT INTO stu VALUE(1002,'小林','女','河南鹤壁','1999-12-30');
INSERT INTO stu VALUES(1003,'小李','女','江苏南通','1999-12-30'),
(1004,'小七','男','安徽合肥','1999-12-30'),
(1005,'小张','女','河北保定','1999-12-30'),
(1006,'小米','女','广东肇庆','1999-12-30');
-- 修改
-- UPDATE 表名 set 字段1=值1,字段2=值2... where 条件
UPDATE stu SET birthday='2001-11-10' WHERE stu_name='小张';
-- 删除
-- DELETE FROM 表 WHERE 条件
DELETE FROM stu WHERE stu_id=1003;
-- DQL
-- 单表查询
-- 查询全部字段
SELECT * FROM stu;
-- 查询指定字段
SELECT stu_id,stu_name FROM stu;
-- 去重查询
SELECT DISTINCT gender FROM stu;
-- 起别名
SELECT DISTINCT gender '性别' FROM stu;
-- 条件查询
-- 算术运算符
SELECT stu_id +1000,stu_name FROM stu;
-- 比较运算符 != 不规范 , <> 规范 都是不等于,都能用
SELECT * FROM stu WHERE stu_id < 1005;
-- 逻辑运算符 and 和 or
SELECT * FROM stu WHERE stu_id=1004 AND birthday = '1999-12-30';
SELECT * FROM stu WHERE stu_id=1004 OR birthday = '1999-12-30';
-- 特殊的逻辑运算符 和 比较运算符
SELECT * FROM stu WHERE stu_id=1001 OR stu_id=1003 OR stu_id=1006;
SELECT * FROM stu WHERE stu_id IN (1001,1003,1006);
SELECT * FROM stu WHERE stu_id NOT IN (1001,1003,1006);
-- age>=10 and age<=20
SELECT * FROM stu WHERE stu_id BETWEEN 1002 AND 1005;
-- 特殊的比较
SELECT * FROM stu WHERE birthday = NULL;-- 错误的写法,但语法没问题
SELECT * FROM stu WHERE birthday IS NULL;-- 对于null要用is null 判断
-- 模糊查询(通配符) _表示一个字符 %表示0~n个字符
SELECT * FROM stu WHERE stu_name LIKE '小_';
SELECT * FROM stu WHERE stu_name LIKE '_小';
SELECT * FROM stu WHERE stu_name LIKE '大_小';
SELECT * FROM stu WHERE stu_name LIKE '小%';
SELECT * FROM stu WHERE stu_name LIKE '%小';
SELECT * FROM stu WHERE stu_name LIKE '%小%';
-- 分组 排序 限制查询数量
-- 分组 将依据(一列或多列)相同的作为一组
-- 分组之后虽然看到的数据只有一行,但这一行代表着一组,一组可能有多条数据
SELECT gender FROM stu GROUP BY gender;
-- 介入了一个概念:聚合函数 count() max() min() avg() sum()
-- 如下面一条语句,虽然按gender分组后,一般只会显示gender一列
-- 但可以通过聚合函数获取到某一列的和或最大值或最小值等结果
SELECT gender,COUNT(stu_id) FROM stu GROUP BY gender;
-- 引入新的关键字 having 分组后的 条件筛选,分组之前用where
-- 即先分组,在分组里筛选(不是只有一列的分组),然后获取到结果
SELECT gender,COUNT(stu_id) cs FROM stu GROUP BY gender HAVING COUNT(stu_id)>2;
-- 排序 (升序、降序,默认是升序,且只能根据一列排序)
SELECT * FROM stu ORDER BY stu_id;-- asc
SELECT * FROM stu ORDER BY stu_id DESC;-- desc
-- 限制查询个数 LIMIT(m,n),其中m是从第几条数据开始查询,n是查询几条数据
-- LIMIT 2,3
SELECT * FROM stu LIMIT 2,3;
4、事务控制语言(TCL)
TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面,简称:TCL,Trasactional Control Languag。代表关键字为commit、rollback。
5、数据控制语言(DCL)
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。简称:DCL,Data Control Language。代表关键字为grant、revoke。