mysql SQL语句

来源:互联网 发布:新买ssd怎么装系统知乎 编辑:程序博客网 时间:2024/06/05 02:30

DDL语句

1.创建数据库:

CREATE  DATABASE  dbname

2.获取系统中所有数据库

SHOW databases

3.选择数据库

USE dbname

4.显示数据库中创建的所有数据表

SHOW tables

5.删除数据库

drop database dbname

6.创建表

CREATE  TABLE  tablename(colum_name_1  colum_type_1  constraints,colum_name_2  colum_type_2  constraints,...colum_name_n  colum_type_n  constraints)

7.查看表的定义

DESC tablename

8.查看创建表的SQL语句

SHOW CREATE TABLE tablename

9.删除表

DROP TABLE tablename

10.修改表
修改字段类型:

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]

修改字段排列顺序
在前面介绍的字段增加和修改语法中[ADD/CHANGE/MODIFY]中, 可选项first|after col_name,这个选项可以用来修改字段在表中位置,其中ADD增加字段默认是加在表的最后位置,而CHANGE/MODIFY默认不会改变字段的位置。
注:该可选字端属于mysql 在标准 SQL上的扩展,其他数据库不一定适用。

更改表名

ALTER TABLE tablename RENAME [TO] new_talbename

DML语句

1.插入记录:
基本语法:

INSERT INTO tablename(field1, field2,...,fieldn) VALUES (value1, value2, ... ,valuen)

也可以不指定字段名称,但是values后面的顺序应该和字段的顺序一致

INSERT INTO tablename VALUES (value1, value2, ... ,valuen)

含有空字段、非空但是含有默认值得字段、自增字段,可以不用在inset后的字段列表里面出现,values后面只写对应字段名称的 value,它们会被设置为null,、默认值、自增的下一数字。

在MySQL中,insert语句可以一次性插入多条记录,语法如下:

INSERT INTO tablename (field1, field2, fieldn)VALUES(record1_value1,record1_value2,..., record1_valuen),(record2_value1,record2_value2,..., record2_valuen),...(recordn_value1,recordn_value2,..., recordn_valuen);

2.更新记录
基本语法:

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

在MySQL中,update命令可以同时更新多个表中数据:

UPDATE t1, t2, ..., tn set t1.field1=expr1, tn.fieldn=exprn [WHERE CONDITION]

注意:多表更新的语法更多地用在根据一个表的字段来动态地更新另一个表的字段。

3.删除记录
基本语法:

DELETE FROM tablename [WHERE CONDITION]

在MySQL中可以一次删除多个表中的数据,语法如下:

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

如果from的表要用别名,在delete后面也要用相应的别名

4.查询记录
基本语法:

SELECT * FROM table [WHERE CONDITION]

查询不重复的记录

SELECT disinct col_name1, col_name2,.., col_namen FROM table [WHERE CONDITION]

条件查询:

SELECT * FROM tablename WHERE field1 = value1

在where后面的条件可以使用>、<、 >=、<=、!=等比较运算符,多个条件键可以使用or、and等逻辑运算符进行多条件联合查询。

排序和限制
利用ORDER BY来实现数据库克排序操作

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

其中,DESC为降序排列,ASC为升序排列(默认)。如果排序字段的值一样,则按照下一个排序字段排序,如果没有下一个字段,则这些相同字段会无序排列。

利用LIMIT限制显示

SELETCT ... [LIMIT offset_start, row_count]

其中,offset_start 表示记录的初始偏移量,默认为0,row_count 表示显示的行数。
limit和order by一起配合使用来进行记录分页显示。
注意:limit属于MySQL扩展SQL92后的方法,在气体数据库上并不通用。

聚合
基本语法:

SELECT [field1, field2, ..., fieldn] fun_nameFROM tablename[WHERE where_condition][GROUP BY field1, field2, ..., fieldn [WITH ROLLUP]][HAVING where_condition]

对参数进行说明:
fun_name表示要做的聚合操作,常有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值).
GROUP BY表示要进行分类聚合的字段,比如安装部门分类统计员工数量,部门就应该写在group by后面。
WHITH ROLLUP为可选语法,表明是否对分类聚合后的结果进行再汇总。
HAVING关键字表示对分类后的结果再进行条件的过滤。
注:having和where区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就记录进行过滤。如果逻辑允许我们尽可能先用where过滤记录,因为结果集建设对聚合的效率大大提高。

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

SELECT t1.field1,..., t1.fieldn, t2.field1,..., t2.fieldnFROM t1, t2WHERE t1.fieldi = t2.fieldi

外连接右分为左连接和右连接,具体定义如下:
左连接:包含所有左边表中的记录甚至是右边表中没有和它匹配的记录。
右连接:包含所有右边表中的记录设置是左边表中没哟和它匹配的记录。

SELECT t1.field1,..., t1.fieldn, t2.field1,..., t2.fieldnFROM t1, t2LEFT JOIN t1 ON  t1.fieldi = t2.fieldi

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

7.记录联合
将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来。

SELECT * FROM t1UNION\UNION ALLSELECT * FROM t2...SELECT * FROM tn;

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

DCL语句

DCL语句主要是DBA用来管理系统中的对象权限时使用。

0 0