Loading

Sql语言-DDL / DCL / DML/ DQL

数据库DDL/DCL/DML/DQL

参考:

image-20220221112257247

sql语言的分类

DDL:数据定义语言

DDL or Data Definition Language actually consists of the SQL commands that can be used to define the database schema. It simply deals with descriptions of the database schema and is used to create and modify the structure of database objects in the database

操作 数据库

* 查看所有数据库: SHOW DATABASES
* 切换数据库: USE 数据库名
* 创建数据库: CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET=utf8]
* 删除数据库: DROP DATABASE [IF EXISTS] 数据库名
* 修改数据库编码: ALTER DATABASE 数据库名 CHARACTER SET utf8

操作 表

*创建表
CREATE TABLE [IF NOT EXISTS] 表名 
(
	列名 列类型,
	列名 列类型,
	...
	列名 列类型 
);

*查看当前数据车中所有表名称: SHOW TABLES;
*查看指定表的创建语句: SHOW CREATE TABLE表名(了解);
*查看表结构: DESC 表名;
*删除表: DROP TABLE 表名;

*修改表: 
	ALTER TABLE 表名 + 的后续语句
	>修改之添加列:
	>ALTER TABLE 表名 ADD (
		列名 列类型,
		列名 列类型,
		...
	);
	
	>修改之修改“列类型”(如果被修改的列已存在数据,那么新的数据可能会影响已经存在的数据)
				   ALTER TABLE 表名 MODIFY 列名 数据类型;
	>修改之修改列名: ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
	>修改之删除列: ALTER TABLE 表名 DROP 列名;
	>修改表名称: ALTER TABLE 原表名RENAME TO 新表名;

数据类型

主要数据类型

int: 整型
double: 浮点型,例如double (5,2)表示最多5位,其中必须有2位小数, 即最大值为999.99;
decimal: 浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题
char:固定长度字符串类型: char(255), 数据的长度不足指定长度,补足到指定长度!
varchar: 可变长度字符串类型: varchar (65535), 不自动补长,但会用一定空间记录数据长度
text (clob):字符串类型:
blob: 字节类型:
date: 日期类型,格式为: yyy-MM-dd;
time:时间类型,格式为: hh:mm:ss
cimestamp: 时间戳类型

字符串类型

image.png

blob类型

image.png

DCL:数据控制语言

DCL includes commands such as GRANT and REVOKE which mainly deal with the rights, permissions, and other controls of the database system.

通常一个项目创建一个用户!一个项目对应的数据库只有一个!

这个用户只能对这个数据库有权限

创建用户

//创建用户
 CREATE USER 用户名@IP地址 IDENTIFIED BY '密码':
>用户只能在指定的IP地址上登录

 CREATE USER 用户名@'%' IDENTIFIED BY '密码';
>用户可以在任意IP地址上登录

给用户授权

GRANT 权限1,..权限n ON 数据库.*  TO  用户名@IP地址
 >权限、用户、数据库
 >给用户分派在指定的数据库上的指定的权限
 >例如: GRANT CREATE, ALTER, DROP , INSERT, UPDATE, DELETE, SELECT ON mydb1.H TO user1@1ocalhost;
 	*给user1用户分派在mydb1数据库.上的create、alter. drop. insert、 update、 delete、 select权限

GRANT ALL ON 数据库.* TO用户名@IP地址:
 >给用户分派指定数据库.上的所有权限

撤销授权

 REVOKE 权限1,...,权限n ON 数据库.* FROM 用户名@IP地址;
	>撤消指定用户在指定数据库上的指定权限
	>例如: REVOKE CREATE, ALTER, DROP ON mydb1.* FROM user1@1ocalhost;
		*撤消user1用户在mydb1数据库.上的create,alter,drop权限

查看权限

SHOW GRANTS FOR 用户名@IP地址;
 >查看指定用户权限

删除用户

DROP USER 用户名@IP地址

DML:数据操作语言

The SQL commands that deals with the manipulation of data present in the database belong to DML or Data Manipulation Language and this includes most of the SQL statements.

It is the component of the SQL statement that controls access to data and to the database. Basically, DCL statements are grouped with DML statements.

DML (数据操作语言,它是对表记录的操作(增、删、改)! )

插入数据

//插入所有列
 INTERT INTO 表名(列名1,列名2,... ) VALUES(列值1,列值2,...);
	>在表名后给出要插入的列名,其他没有指定的列等同与插入nu11值。
	>在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应。
	
//插入部分列
 INTERT INTO 表名 VALUES (列值1,列值2)
	>没有给出要插入的列,那么表示插入所有列。
	>值的个数必须是该表列的个数。
	>值的顺序,必须与表创建时给出的列的顺序相同。

注意:数据库中所有的字符串类型,必须使用单引号,不能用双引号! 日期类型也要用单引号!

修改数据

//根据逻辑表达式修改对应行语句
 update 表名 set 列名1=列值1 [,列名2=列值2....] [where 逻辑表达式]

>运算符:=、!=、<>、>,<、>=、<=、BETWEEN...AND、 IN(. ..)、 IS NULL、 NOT、 OR、 AND

 WHERE age BETWEEM 20 AND 40  <=>  WHERE age>=20 AND age<=40
 WHERE name='张三' or name='李四' <=> WHERE name IN ('张三','李四')
 WHERE 列值 = NULL  永远返回 False,改用  WHERE 列值 IS NULL
 IS NULL 相对的是 IS NOT NULL

删除数据

//不加where就整个表都清空了
 DELETE FROM 表名 [WHERE 条件表达式]

//TRUNCATE是DDL语句,它是先删除drop该表,再create该表。 而且无法回滚! ! !
 TRUNCATE TABLE 表名: 

DQL : 数据查询语言

DQL statements are used for performing queries on the data within schema objects. The purpose of the DQL Command is to get some schema relation based on the query passed to it. We can define DQL as follows it is a component of SQL statement that allows getting data from the database and imposing order upon it. It includes the SELECT statement. This command allows getting the data out of the database to perform operations with it. When a SELECT is fired against a table or tables the result is compiled into a further temporary table, which is displayed or perhaps received by the program i.e. a front-end.

DQL语句不会改变表格结果,只是打印出信息会因表达式而改变

示例表格

image.png

单表操作-列控制

*查询所有列
 SELECT * FROM 表名;

*查询指定列
 SELECT [*] 列1 [,列2,...列N] FROM 表明;
 
*完全重复的记录只一次
  当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,	   这总可能就大了!
  SELECT DISTINCT * | 列1 [, 列2, ... 列N] FROM 表名;

*列运算
 **数量类型的列可以做 加、减、乘、除 运算
  SELECT sal*1.5 FROM emp;
  SELECT sal+corm FROM emp;
  SELECT * , sal*1.5 FROM emp;

 **字符串类型可以做连接运算
  SELECT CONCAT('工资:', sal [,字符串,...]) FROM emp;
  
 **转换NULL值
  有时需要把NULL转换成其它值,例如com+1000时, 如果com列存在NULL值,那么NULL+1000还是     NULL,而我们这时希望把NULL当成0来运算。  
  SELECT IFNULL(corm, 0)+1000 FROM emp;
  --> IFNULL (comm, 0): 如果Ccomm中存在NULL值,那么当成0来运算。
  
 **给列起别名
  你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个   别名,这样在结果集中列名就显示别名了
  SELECT IFNULL(comm, 0)+1000 AS 奖金 FROM emp;
  --> 其中As可以省略

单表操作-条件控制

*条件查询
 与前面介绍的UPDATE和DELETE语句-样,SELECT语句 也可以使用WHERE子句来控制记录。
 SELECT empno, ename, sal,comm FROM emp WHERE sal > 10000 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 ('经理', '董事长');
 
*模糊查询
 当你想查询姓张,并且姓名一共两个字的员工时,这时就可以使用模糊查询
 SELECT 米FROM emp WHERE ename LIKE '张_ ';
 -->模糊查询需要使用运算符: LIKE, '_'其中匹配一个任意字符,注意,只匹配一个字符而不是多个。
 -->上面语句查询的是姓张,名字由两个字组成的员工。
 
 SELECT * FROM emp WHERE ename LIKE '___'; /*姓名由3个字组成的员工*/
 如果我们想查询姓张,名字几个字都可以的员工时就要使用“%”了。
 
 SELECT * FROM emp. WHERE ename LIKE '张%';
 -->其中匹配0~N个任意字符,所以上面语句查询的是姓张的所有员工。
 
 SELECT * FROM emp WHERE ename LIKE '%阿%';
 -->千万不要认为上面语句是在查询姓名中间带有阿字的员工,因为匹配0~N个字符,所以姓名以阿开头和结尾的员工也 都会查询到。
 
 SELECT * FROM emp WHERE ename LIKE '%';
 -->这个条件等同与不存在,但如果姓名为NULL的查询不出来!
 
*模糊搜索补充
 如果目标字段包含'%'或'_',要用语法 ESCAPE'<转义字符>'。
 比如,我们要搜索一个字符串"g_",如果直接 LIKE "g_",那么"_"的作用就是通配符,而不是字符
 结果,我们会查到比如"ga","gb","gc",而不是我们需要的 "g_".
 用LIKE'gs_' ESCAPE 'S'   
 'S'表示特殊用法标志

单表操作-排序

*升序
SELECT * FROM emp ORDER BY sal ASC
-->按sa1排序,升序
-->其中ASC是可以省略的

*降序
SELECT * FROM emp ORDER BY comm DESC;
-->按comm排序,降序!
-->其中DESC不能省略

*使用多列作为排序条件 前面的条件优先级高
SELECT * FROM  emp ORDER BY sal ASC , comm DESC: 

单表操作-聚合函数

*COUNT
 SELECT COUNT(*) FROM emp;
 -->计算emp表中所有列都不为NULL的记录的行数
 SELECT COUNT (comm) FROM emp;
 -->计算emp表中cormm列不为NULL的记录的行数
 
*MAX
 SELECT MAX(sa1) FROM emp;
 -->查询最高工资
 
*MIN
 SELECT MIN(sal) FROM emp;
 -->查询最低工资
 
*SUM
 SELECT SUM(sal) FROM emp;
 -->查询工资和

*AVG
 SELECT AVG(sal) FROM emp;
 -->查询平均工资

单表操作-分组

将查询结果按属性分组,一般按 有信息重复的列 分组才有意义

一般分组配合聚合函数使用(例),除了分组列是列名,其他都是聚合函数

image.png

*分组查询
 分组查询是把记录使用某一列进行 分组,然后查询组信息。
 例如:查看所有部门的记录数。
 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;

单表操作-语句顺序

*语法顺序是如此,执行顺序也是如此
 SELECT  FROM  WHERE  GROUP BY   HAVING   ORDER BY

例:查询 工资大于15000的人员的人数 超过两个的部门(没有排序)。

image.png

单表操作-方言LIMIT

用于实现分页查询

LIMIT用来限定查询结果的起始行,以及总行数。
例如:查询起始行为第5行,一共查询3行记录
SELECT * FROM emp LIMIT 4,3;
-->其中4表示从第5行开始,其中3表示一共查询3行。 即第5、6、7行记录。

起始页: (当前页-1) * 每页记录数
posted @ 2022-02-21 11:38  CHZarles  阅读(48)  评论(0)    收藏  举报