SQL (Structure Query Language)语言的分类:DQL、DDL、DML、DCL、TCL

首先,我们认识一下常见的数据库语言:

DQL:数据库查询语言。关键字:SELECT ... FROM ... WHERE。

DDL :数据库模式定义语言。关键字:CREATE,DROP,ALTER。

DML:数据操纵语言。关键字:INSERT、UPDATE、DELETE。

DCL:数据控制语言 。关键字:GRANT、REVOKE。

TCL:事务控制语言。关键字:COMMIT、ROLLBACK、SAVEPOINT。

DDL,DML,DCL,DQL,TCL共同组成数据库的完整语言。

 

       SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言。该语言功能强,效率高,简单易学易维护。然而,SQL语言有以上优点,同时也出现了这样一个问题:该语言是非过程性语言,即大多数语句都是独立执行的,与上下文无关,而绝大部分应用都是一个完整的过程,显然用SQL完全实现这些功能是很困难的。所以大多数数据库公司为了解决此问题,作了如下两方面的工作:

(1)扩充SQL,在SQL中引入过程性结构;(2)把SQL嵌入到高级语言中,以便一起完成一个完整的应用。

SQL 语句主要分4类

DDL (Data Definition Language) 语句:数据定义语句,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象。

DML (Data Manipulation Language) 语句:数据操纵语句,用于添加,删除,更新和查询数据库记录,并检查数据完整性。

DCL (Data Control Language) 语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库,表,字段,用户的访问权限和安全级别。

DQL (Data Query Language) 语句:数据查询语句,是SELECT子句,FROM子句,WHERE子句组成的查询块。

 

DDL 语句(数据定义语言

数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
| | | | |
表 视图 索引 同义词 簇

DDL操作是隐性提交的!不能rollback 

1.创建数据库

连接数据库

mysql -u root -p

mysql 代表客户端命令

-u 后面跟连接的数据库用户

-p 表示需要输入密码

create DATABASE dbname;    

查看数据库

show databases;

选择要操作的数据库

use dbname;

查看数据库的表

show tables;

2.删除数据库

drop database dbname;

3.创建表

 create table tablename(

     column_name1 column_type1 constraints,

     ...    

     column_name_n column_type_n constraints);

column_name 是列的名字
column_type 是列的类型
constraints 是这个列的约束条件

查看表的定义

desc tablename;

查看更全面的表的定义

show create table tablename;

4.删除表

 drop table tablename;

5.修改表

修改表的类型

ALTER TABLE tablename MODIFY [COLUMN] col_name column_definition [first | after col_name];

增加表字段

ALTER TABLE tablename ADD [COLUMN] col_name column_definition [first | after col_name];

删除表字段

ALTER TABLE tablename DROP [COLUMN] col_name;

字段改名,同时修改字段类型

ALTER TABLE tablename CHANGE [COLUMN] old_col_name new_col_name column_definition [first | after col_name];

修改字段排列顺序

前面介绍的的字段增加和修改语法(ADD/CNAHGE/MODIFY)中,都有一个可选项 first|after col_name,这个选项可以用来修改字段在表中的位置,默认 ADD 增加的新字段是加在表的最后位置,而 CHANGE/MODIFY 默认都不会改变字段的位置

表改名

ALTER TABLE tablename RENAME [TO] new_tablename;

数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:

CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
| | | | |

表 视图 索引 同义词 簇

DDL操作是隐性提交的!不能rollback 。

 

DML 语句(数据操纵语言

数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE

1.插入记录

INSERT INTO tablename [(field1,field2,……fieldn)] VALUES(value1,value2,……valuesn)[,(value1,value2,......valuesn)]*;

对于含可空字段、非空但是含有默认值的字段、自增字段,可以不用在 insert 后的字段列表里面出现,values 后面只写对应字段名称的 value,这些没写的字段可以自动设置为 NULL、默认值、自增的下一个数字,这样在某些情况下可以大大缩短 SQL 语句的复杂性。

也可显示的插入特定的值,设置为可空的字段都显示为 NULL

insert into tablename (field1,field3) values(value1,value3);

2.更新记录(修改)

 UPDATE tablename SET field1=value1,field2=value2,……fieldn=valuen [WHERE CONDITION];

同时更新多个表中数据

UPDATE t1 [a],t2 [b] set a.field1=expr1,b.field2=expr2 [WHERE CONDITION];// a 和 b 是 t1 和 t2 这两个表的别名

3.删除记录

 DELETE FROM tablename [WHERE CONDITION];

一次删除多个表的数据

DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION]

如果 from 后面的表名用别名,则 delete 后面的也要用相应的别名,否则会提示语法错误

 

DCL 语句(数据控制语言

grant 和 revoke

数据控制语言DCL用来授予或回收访问数据库的某种特权(访问权限、安全设置),并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:

1) GRANT:授权。

2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。

回滚---ROLLBACK

回滚命令使数据库状态回到上次最后提交的状态。其格式为:

SQL>ROLLBACK;

3) COMMIT [WORK]:提交。

 

DQL 语句(数据查询语言

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>

查询记录

SELECT * FROM tablename [WHERE CONDITION];// * 表示要将所有的记录都选出来,也可以用逗号分割的所有字段来代替

查询不重复的记录

有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现

select distinct colname1,colname2 from tablename;

条件查询

在很多情况下,用户并不需要查询所有的记录,而只是需要根据限定条件来查询一部分数据,用 where 关键字可以实现

排序和限制

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]]

其中,DESC(descending order) 和 ASC(ascending order) 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序排列,如果不写此关键字默认是升序排列。ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序。如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推。如果只有一个排序字段,则这些字段相同的记录将会无序排列

对于排序后的记录,如果希望只显示一部分,而不是全部,这时,就可以使用 LIMIT 关键字

SELECT ……[LIMIT offset_start,row_count]

其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。在默认情况下,起始偏移量为 0,只需要写记录行数就可以,这时候,显示的实际就是前 n 条记录

聚合

SELECT [field1,field2,……fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,……fieldn [WITH ROLLUP]] [HAVING where_contition];

fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)

GROUP BY 关键字表示要进行分类聚合的字段

WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总

HAVING 关键字表示对分类后的结果再进行条件的过滤

注意:having 和 where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤

表连接

表连接分为内连接和外连接,它们之间的最主要区别是内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

我们最常用的是内连接

select ename,deptname from emp,dept where emp.deptno=dept.deptno;

外连接有分为左连接和右连接

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。右连接和左连接类似,两者之间可以互相转化。

select ename,deptname from dept right join emp on dept.deptno=emp.deptno;

子查询

某些情况下,当我们查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。用于子查询的关键字主要包括 in、not in、=、!=、exists、not exists 等

select * from emp where deptno in(select deptno from dept);

记录联合

我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候就需要用 union 和 union all 关键字来实现这样的功能

SELECT * FROM t1 UNION|UNION ALL SELECT * FROM t2;

UNION 和 UNION ALL 的主要区别是 UNION ALL 是把结果集直接合并在一起,而 UNION 是将UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果

 

    在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。

 (1) 显式提交

用COMMIT命令直接完成的提交为显式提交。其格式为: SQL>COMMIT;

(2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令是:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP, EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:

SQL>SET AUTOCOMMIT ON

 

帮助的使用

如果不知道帮助能够提供些什么,可以用 ? contents 命令来显示所有可供查询的的分类。

对于列出的分类,可以使用 ? 类别名称 的方式针对用户感兴趣的内容做进一步的查看。

在实际应用当中,如果需要快速查阅某项语法时,可以使用关键字进行快速查询!例如,想知道 show 命令都能看些什么东西,可以用 ? show 命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值