SQL语句简述
SQL语句:
一:DDL: 数据定义语言,用来定义数据库对象:对数据库或表的结构操作(增、删、改create drop alter )。
扩展以下要点:
1.数据库
查看所有数据库:SHOW DATABASES
切换(选择要操作的)数据库:USE 数据库名
创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8]
删除数据库:
DROP DATABASE [IF EXISTS] mydb1
修改数据库编码:
ALTER DATABASE mydb1 CHARACTER SET utf8
2,创建表:
CREATE TABLE [IF NOT EXISTS] 表名(列名 列类型,....);
查看当前数据库中所有表名称:SHOW TABLES;
查看指定表的创建语句:SHOW CREATE TABLE 表名;
查看表结构:DESC 表名;
删除表:DROP TABLE 表名;
修改表:前缀为 ALTER TABLE 表名
a)添加列:
ALTER TABLE 表名 ADD(列名 列类型,……);
b)修改类类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据):ALTER TABLE 表名 MODIFY 列名
列类型;
c)修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
d)删除列:ALTER TABLE 表名 DROP 列名;
e)修改表名称:ALTER TABLE 原表名 RENAME TO 新表名;
二:DML:数据操作语言,用来定义数据库记录(数据); 对表的记录进行更新(增、删、改)。
**1:插入数据**
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应;
在数据库中所有的字符类型,必须使用单引号,不能使用双引号,日期类型也要使用单引号
**2:修改数据**
UPDATE 表名 SET 列名1=列值1,列名2=列值2,... [WHERE 条件]
条件(条件可选):
条件必须是一个boolean类型的值或表达式:UPDATE t_person SET gender=’男’, age=age+1 WHERE sid=’1’;
运算符:=,!=,<>,>,<,>=,<=,BETWEEN…AND,IN(…),IS NULL,NOT,OR,AND
**3:删除数据**
DELETE FROM 表名 [WHERE 条件];
TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它是先删除drop该表,再create该表,而且无法回滚。
三:DCL:数据控制语言,用来定义访问权限和安全等级; 对用户的创建和授权。 不常用
1.创建用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';
用户只能在指定的IP地址上登录
CREATE USER 用户名@'%' IDENTIFIED BY '密码';
用户可以在任意IP地址上登录
2.给用户授权
GRANT 权限1,……,权限n ON 数据库.* TO 用户名@IP地址;
给用户分派在指定的数据库上的指定权限
例如:
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
给user1用户分派在mydb1数据库上的CREATE、ALTER、DROP、INSERT、UPDATE、DELETE、SELECT权限
GRANT ALL ON 数据库.* TO 用户名@IP地址;
给用户分派指定数据库上的所有权限
3.撤销授权
REVOKE 权限1,……,权限n ON 数据库.* FROM 用户名@IP地址;
撤销指定用户在指定数据库上的指定权限
例如:
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
撤销user1用户在mydb1数据库上的CREATE、ALTER、DROP权限
4.查看权限
SHOW GRANTS FOR 用户名@IP地址;
查看指定用户的权限
5.删除用户
DROP USER 用户名@IP地址;
四:DQL:数据查询语言,用来查询记录(数据); 主要是对表记录的查询。(重点) DQL语句只会对数据库查询,不会修改数据。
1.基本查询
1.查询所有列
SELECT * FROM 表名;
2.查询指定列
SELECT 列1[,列2,……列n] FROM 表名;
3.给列起别名
当使用列运算后,查询出的结果集中的列名称不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了。
SELECT IFNULL(comm,0)+1000 AS 奖金 FROM emp;
其中AS可以省略
2.条件控制
1.条件查询
与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。
SELECT empno,ename,sal,comm FROM emp WHERE sal > 1000 AND comm IS NOT NULL;
SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
SELECT empno,ename,job FROM emp WHERE job IN('经理','董事长');
2.模糊查询
当你想查询姓张,并且姓名一共两个字的员工时,就可以使用模糊查询
SELECT * FROM emp WHERE ename LIKE '张_';
模糊查询需要使用运算符:LIKE,其中匹配一个任意字符,注意,只匹配一个字符而不是多个。
上面语句查询的是姓张,名字由两个字组成的员工。
下划线“_”可以匹配1个字符,如果要匹配0-n个字符,需要用“%”;
SELECT * FROM emp WHERE ename LIKE ‘%刚’;
查询名字结尾是带“刚”字的员工。
3.排序查询
1.升序
SELECT * FROM emp ORDER BY sal ASC;
2.降序
SELECT * FROM emp ORDER BY comm DESC;
3.使用多列作为排序条件
SELECT * FROM emp ORDER BY sal ASC, comm DESC;
使用sal升序排序,如果sal相等,再按照comm降序排序
4.聚合函数
1.COUNT()函数
SELECT COUNT(*) FROM emp;// 计算emp表中所有列都不为NULL的记录的行数
SELECT COUNT(comm) FROM emp;//计算emp表中comm列不为NULL的记录的行数
2.MAX()函数
SELECT MAX(sal) FROM emp;// 查询最高工资
3.MIN()函数
SELECT MIN(sal) FROM emp;// 查询最低工资
4.SUM()函数
SELECT SUM(sal) FROM emp; //查询所有员工工资的总和
5.AVG()函数
SELECT AVG(sal) FROM emp;// 查询平均工资
5.分组查询
分组查询是把记录使用某一列进行分组,然后查询组信息。
例如:查看所有部门的记录数。
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
使用deptno分组,查询部门编号和每个部门的记录数
SELECT job,MAX(sal) FROM emp GROUP BY job;
使用job分组,查询每种工作的最高工资组条件以部门分组,查询每组记录数,条件为记录数大于3
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno HAVING COUNT(*) > 3;
*
6.LIMIT子句(方言)
SELECT * FROM emp LIMIT 4,3;
其中4表示从第5行开始,其中3表示一共查询3行。即第5/6/7行记录。
例如:每页显示10条记录,查询第3页
SELECT * FROM emp LIMIT 20,10;
enweet/stackedit