一、数据库定义语句(DDL语句)
1,CREATE DATABASE 创建数据库
CREATE DATABASE USERDB
注:CREATE 表示创建的意思,DATABASE后加新建数据库名
2,USE USERDB GO 指定给数据库
USE USERDBGO
AS
注:USE 后加数据库,主要是指新建查询后,不是在你想要的数据库中,可以使用该语句转过去
3,创建视图
CREATE VIEW view_name AS
SELECT column_name(s) FROM table_name WHERE condition
注:创建视图时可以先写好查询语句,多表使用内连接。然后把下面的select语句替换就好了
4,CREATE TABLE 创建一张表
CREATE TABLE table_name(
column_name1 data_type(size),
column_name2 data_type(size),
column_name2 data_type(size),....)
注:DATABASE后加表名,括号中写列名,空格加列的数据类型。逗号后写你需要添加的列。
5,CONSTRAINT 约束
CREATE TABLE table_name(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
注:constraint_name可以换成约束的语句,这里写的不是很详细,可以百度
(1)NOT NULL - 指示某列不能存储 NULL 值。(非空)
(2)UNIQUE - 保证某列的每行必须有唯一的值(主键)
(3)PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个 列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录(自 增长)
(4)FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性(外 键)
(5)CHECK - 保证列中的值符合指定的条件。(条件)
(6)DEFAULT - 规定没有给列赋值时的默认值。(默认值)
6,CREATE INDEX 索引
CREATE INDEX index_name ON table_name (column_name)
注:说白了就是建主外键关系。
7,ALTER TABLE 添加一列
ALTER TABLE table_name ADD column_name datatype
注:就是在原来的表中添加一列
8,DROP 删除数据库,表
(1)删除数据库 :
DROP DATABASE database_name
(2)删除表 :
DROP TABLE table_name
(3)清除表中数据:
TRUNCATE TABLE table_name
注:删除都要注意,别乱删。搞不好要提桶跑路的
二、数据库操作语句(DML语句)
(一)INSERT语句
1,无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,...)
注:有多少个列名就添加多少个,主键是不用添加的,外键要根据外键表去添加
2,需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...)
注:指定列名了多少列名就添加多少个。
3,使用SELECT添加写法:
INSERT INTO table_name (column1,column2,column3,...) AS
select column1,column2,column3,... from table_name where 查询的条件
注:select和正常的查询语句一样,就是要列名数量相同。
(二)UPADATE 语句
UPDATE table_name SET column1=value1,column2=value2,...
WHERE some_column=some_value;
注:SET 就是赋值的意思,在执行添加一定要写好条件。可以先使用查询语句查出你需要修改的数据。
(三)DELETE 语句
DELETE FROM table_name WHERE some_column=some_value;
注:
1,没有加条件就是清空表中的所有数据,这里建议还是加上条件吧。毕竟在工作中不会清掉表中所有数据。删错了数据,如果有快照,可以使用快照恢复。没有的话,提桶跑路吧!
2,删除和添加一样执行前一定要先看清楚。最好的办法是先写查询,查一下,根据查询语句来删除
三、数据查询语句(DQL语句)
1,SELECT 简单的查询
SELECT * FROM table_name
注:*代表查询所有列名
2,SELECT 查询你需要的列名
SELECT column_name,column_name FROM table_name
注:可以和*一起使用。*前面要加逗号。
3,DISTINCT 去掉重复值的查询
SELECT DISTINCT column_name FROM table_name
注:DISTINCT 是去掉重复的意思,后是接的你需要去掉的列名
4, WHERE条件查询
SELECT column_name,column_name FROM table_name WHERE column_name='李四'
注:where就是查询条件的意思,where 后要加入查询的条件。这条件可以等于,大于,小于
5,AND运算符
SELECT column_ID,column_name FROM table_name WHERE column_ID= 1 and column_name='王五'
注:如果第一个条件和第二个条件都成立,则 AND 运算符显示相关记录。
6,OR 运算符
SELECT column_ID,column_name FROM table_nameWHERE column_ID= 2 OR column_name='王五'
注:如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示相关记录
7, ORDER BY 排序查询
SELECT column_name,column_name FROM table_name ORDER BY column_name ASC|DESC
注:ORDER BY 后面需要排序的列名 ,ASC表示正序,DESC表示倒序。
8, GROUP BY 分组查询
SELECT column_ID,count(*) FROM table_name GROUP BY column_ID
注:GROUP BY 后面需要分组的列名,只能显示你分组的的列名,可以结合聚合函数使用。下面有聚合函数的使用方法。
9,HAVING 筛选分组
SELECT column_name, aggregate_function(column_name) FROM table_name
WHERE column_name operator value GROUP BY column_name
HAVING aggregate_function(column_name) operator value
注:HAVING 子句可以让我们筛选分组后的各组数据。
10,AS 别名
SELECT column_name AS alias_name FROM table_name
注:AS就是重新取个名字,可以使用到列名和表名上。
11,TOP 查询前几行的数据
SELECT TOP 5 table_name,table_name... FROM table_name
注:TOP后的数字是表示需要显示几条数据,想显示几条就写数字几表示。
12,LIKE 模糊查询
SELECT * FROM table_name WHERE column_name LIKE ’%pattern%’
注: LIKE前是表示需要模糊查询的列名,后面是表示模糊查询的字符串
13,% _ [] [~] [!] 通配符
(1)% 表示替代 0 个或多个字符,
(2)_ 表示替代一个字符,如果需要几个字符,打几个_就可以了
(3)[] 表示字符列中的任何单一字符
(4)[~] [!] 表示不在字符列中的任何单一字符,两个的用法一样
注:通配符是和模糊查询一起使用的。
14,IN 操作符
SELECT * FROM table_name WHERE column_name IN (value1,value2,...)
注:查询多个值使用,在工作上会经常使用。IN前面表示需要查询的列名,括号里表示需要查询的值,可以多个,也可以单个。
15,BETWEEN 操作符
SELECT *FROM table_name WHERE column_name BETWEEN value1 AND value2
注:BETWEEN 表示查询一个区间的数据,BETWEEN前面表示需要查询的列名,value1与value2表示区间的数字。
16,JOIN 内链接查询
第一种: INNER JOIN 两表中相同的数据。
SELECT * FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name
注:就是查出两张表中相同的数据,ON后面可以接上一个或多个列名。
第二种:LEFT JOIN 左查询
SELECT * FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name
注:从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
第三种:RIGHT JOIN 右查询
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name
注:从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
第四种:FULL OUTER JOIN 两表中的数据。
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name
注:只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行
17,子查询
SELECT * FROM table1 WHERE column_name=(SELECT column_name FROM table2)
注:table2查询出的值将作为条件,查询table1中的数据。子语句中只能返回一个列名。
18,多表链接查询
SELECT * FROM table1 tab1,table2 tab2 WHERE tab1.ID=tab2.ID
注:两张表最好设置主外键关系,也可以加上其他条件。自己多去理解!
19,UNION 表合并查询
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2
注:(1)UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
(2)UNION ALL 是有返回重复的值。
(3)请注意,UNION 内部的每个SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个SELECT 语句中的列的顺序必须相同。
四、聚合函数
1,AVG() 函数 (平均值)
SELECT AVG(column_name) FROM table_name
2,COUNT() 函数(总和)
SELECT COUNT(column_name) FROM table_name
3,FIRST() 函数(第一个记录的值)
SELECT FIRST(column_name) FROM table_name
4,LAST() 函数(最后一个记录的值)
SELECT LAST(column_name) FROM table_name
5,MAX() 函数(最大值)
SELECT MAX(column_name) FROM table_name
6,MIN() 函数(最小值)
SELECT MIN(column_name) FROM table_name
7,SUM() 函数(列的总数)
SELECT SUM(column_name) FROM table_name
8,UCASE() 函数 (自动识别英文,转化为大写)
SELECT UCASE(column_name) FROM table_name
9,LCASE() 函数 (自动识别英文,转化为小写)
SELECT LCASE(column_name) FROM table_name
10,MID() 函数(提取字符)
SELECT MID(column_name,start,length) FROM table_name
注:column_name表示列名,start表示开始的字段,length表示结束的字段
11,LEN() 函数 (文本字段中值的长度)
SELECT LEN(column_name)FROM table_name
12, ROUND() 函数 (把数值字段舍入为指定的小数位数)
SELECT LEN(column_name)FROM table_name
13,GETDATE()函数 (当前系统的日期和时间)
SELECT GETDATE() FROM table_name
14,NULL 与 IS NULL 与IS NOT NULL
(1)NULL 是代表空值,不是代表空字符。
(2)IS NULL 是代表为空值,区别=NULL与IS NULL,=NULL 是赋值的意思用于 SET。而IS NULL是为空值,多用于查询条件。
(3)IS NOT NULL 是不为空值,用法于IS NULL 一样
15,EXISTS 运算符
SELECT column_name(s) FROM table_name WHERE EXISTS(SELECT column_name FROM table_name WHERE condition)
注:EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
五、数据控制语言(DCL语句)
1、创建用户
CREATE USER ‘user1’@localhost IDENTIFIED BY ‘123’;
CREATE USER ‘user2’@’%’ IDENTIFIED BY ‘123’;
注:CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
2、给用户授权
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;
注:GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
3.撤销授权
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
注:REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
4.查看用户权限
SHOW GRANTS FOR user1@localhost;
注:SHOW GRANTS FOR ‘用户名’@地址;
5.删除用户
DROP USER ‘user1’@localhost;
注:DROP USER ‘用户名’@地址
6.修改用户密码(以root身份)
alter user 'user1'@localhost identified by '123456';
注:alter user '用户名'@localhost identified by '新密码';
六、作者有话说
本文档借鉴了菜鸟教程:SQL 教程 | 菜鸟教程。
我这里写的比较全一点点。如果有漏写的,还请各位大神指点。
这里只是总结了数据库中大部分的知识点,其他的没有总结到还请见谅。
虽说我是单个知识点分开写的,但是在工作上还是会要你写复杂的SQL语句,且是写在存储过程中。
这份文档是基础,类似于知识点的总结,高级使用还是需要自己去研究的。加油吧!!!!