SQL 语句主要可以划分为以下 3 个类别。

DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。

就是对数据库内部的对象进行创建、删除、修改的操作语言

DML(Data Manipulation Language)语句 :数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。

对数据库中表记录的操作

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

主要是DBA用来管理系统中的对象权限时所使用,一般的开发人员很少使用

安装MySQL 时系统自动创建的,其各自功能如下。
information_schema:主要存储了系统中的一些数据库对象信息。比如用户表信息、列信息、权限信息、字符集信息、分区信息等。
cluster:存储了系统的集群信息。
mysql:存储了系统的用户权限信息。
test:系统自动创建的测试数据库,任何用户都可以使用。

1.DDL

(1).创建数据库

create database dbname;

可以用  show databases;  来查看有哪些数据库

选择数据库 ;

use dbname;

(2).删除数据库

drop database dbname;

(3).创建表

create table tablename (column_name_1 column_type_1 constraints,column_name_2  column_type_2  constraints , ……column_name_n  column_type_n constraints);
 

可以用 下面的语法查看表的定义:

desc tablename; 

(4).删除表

drop table tablename;

(5).修改表

修改表类型:

ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name];

增加表字段:

ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name];

删除字段:

ALTER TABLE tablename DROP [COLUMN] col_name;

字段改名:

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name];

注意:change 和 modify都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是 change 的优点是可以修改列名称,modify则不能。
修改字段排列顺序:
前面介绍的的字段增加和修改语法(ADD/CNAHGE/MODIFY)中,都有一个可选项 [first|aftercolumn_name],这个选项可以用来修改字段在表中的位置,默认 ADD 增加的新字段
是加在表的最后位置,而 CHANGE/MODIFY 默认都不会改变字段的位置。
    注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于 MySQL 在标准 SQL 上的扩展,在其他数据库上不一定适用。

(6).表改名

ALTER TABLE tablename RENAME [TO] new_tablename;

2.DML

(1).插入记录

一条记录:

INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn); /*field和value一一对应,field可以省略*/

多条记录:

INSERT INTO tablename (field1, field2,……fieldn)
VALUES
(record1_value1, record1_value2,……record1_valuesn),
(record2_value1, record2_value2,……record2_valuesn),
……
(recordn_value1, recordn_value2,……recordn_valuesn)
;
/*field可以省略*/

(2).更新记录

更新一个表中的数据:

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

更新多个表中的数据:

UPDATE t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]; /*t为表名*/

(3).删除记录

删除一个表中记录:

DELETE FROM tablename [WHERE CONDITION];

删除多个表中记录:

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

注意:不管是单表还是多表,不加 where 条件将会把表的所有记录删除,所以操作时一定要小心。

(4).查询记录

基本的语法:

SELECT * FROM tablename [DISTINCT] [WHERE CONDITION]; /*distinct是消除重复的记录,where条件查询*/

排序和限制:

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],……fieldn [DESC|ASC]];
/* DESC 和 ASC 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序排列,如果不写此关键字默认是升序排列。ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序。*/

限制显示:

SELECT ……[LIMIT offset_start,row_count];

注意:limit 属于 MySQL 扩展 SQL92 后的语法,在其他数据库上并不能通用。limit 经常和 order by 一起配合使用来进行记录的分页显示。
聚合:

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 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在 group by 后面。

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

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

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

(5).子查询:

记录联合:

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

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

3.DCL

【SQL基础】三种类别语句的更多相关文章

  1. Java语言----三种循环语句的区别

    ------- android培训.java培训.期待与您交流! ---------- 第一种:for循环 循环结构for语句的格式:       for(初始化表达式;条件表达式;循环后的操作表达式 ...

  2. [SQL基础教程] 2-1 SELECT语句基础

    [SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...

  3. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  4. JavaScript三种判断语句和三元运算符

    三种判断语句 1.if结构 语法:if(条件){条件满足时执行的代码块} 2.if else结构 语法:if(条件){条件满足时执行的代码块}   else{条件不满足时执行的代码块} 3.if el ...

  5. SQL基础--查询之五--查询语句一般格式

    SQL基础--查询之五--查询语句一般格式

  6. js的三种输出语句,以及html的运行循序

    js最常见的三种输出语句 1.console.log()这个语句是在浏览器控制台输出的.进入网页点击f12可查看 2.alert()弹出一个对话框, 3.document.write这个语句是在页面输 ...

  7. 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  8. SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

  9. switch语句以及三种循环语句的总结

    1:switch语句(1)格式:switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n+1;break;} 格式解释说明: ...

随机推荐

  1. jvm特性(3)( 收集算法和收集器的概念)

    java内存模型和线程规范 JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现 大致知识点如下: 4种垃圾收集算法概念的学习 7种垃圾收集器特征的学习 一. 垃圾收集算法 1. 标记-清除算 ...

  2. rabbitmq系列三 之发布/订阅

    1.发布/订阅 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模 ...

  3. phpdocumentor生成代码注释文档(linux)

    1,默认安装lnmp环境(php7),默认pear安装 2,   pear channel-discover pear.phpdoc.org pear install phpdoc/phpDocume ...

  4. Android_Activity启动模式

    在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...

  5. Adobe CC Family 2015 Master 或 Adobe CC Family 2017 Master的安装步骤(图文详解)

    不多说,直接上干货!   你还在为安装PS烦恼吗?你还在为制作视频软件寻找烦恼吗?..... 前言 现在,已经出来了 简单了解, Adobe Acrobat的百度百科: http://baike.ba ...

  6. C/C++ -- Gui编程 -- Qt库的使用 -- 对话框QDialog

    模态对话框 -----源文件main.cpp(工程QtDialog)----- #include "qtdialog.h" #include <QApplication> ...

  7. ES6-let、const和块级作用域

    1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填 ...

  8. springweb flux websocket

    直接上代码: import org.springframework.stereotype.Component; import org.springframework.web.reactive.sock ...

  9. [笔记] Python 图片转字符画

    一.介绍 用Python 代码完成图片转字符画 二.python 环境 Python 3.6.6 pillow 5.1.0  Python 图像处理库, 需要另外安装 三.原理 gray = 0.21 ...

  10. [笔记] print函数进阶

      1.1print(values=None,sep='',end='\n',file=sys.stdout,flush=False) 参数: values:输出到控制台的string sep:设置输 ...