二 mysql语句

1.结构化查询语句分类

名称                                 解释                                                                     命令

DDL(数据定义语言)   定义和管理数据对象,如数据库,          CREATE、DROP、ALTER                                           数据表等。

DML(数据操作语言) 用于操作数据库对象中所包含的数据     INSERT、UPDATE、DELETE

DQL(数据查询语言) 用于查询数据库数据                              SELECT

DCL(数据控制语言) 用来管理数据库的语言,包括管理    GRANT、COMMIT、ROLLBACK

                                      权限及数据更改。

2.命令行操作数据库

创建数据库

CREATE  DATABASE    [IF NOT  EXISTS]  数据库名;

删除数据库

DORP DATABASE  [IF EXISTS] 数据库名;

查看数据库

SHOW  DATABASES;

使用数据库

USE  数据库名;

3.操作数据表

DDL

显示表结构 

desc 表名

显示表创建语句

show create table 表名

创建数据表

CREATE  TABLE [ IF NOT EXISTS ]    `表名`  (

`字段名1`    列类型 [ 属性 ]  [ 索引 ] [注释] ,

`字段名2`  列类型 [ 属性 ]  [ 索引 ] [注释] ,

… …   

`字段名n`  列类型 [ 属性 ]  [ 索引 ] [注释]

)  [  表类型 ] [ 表字符集 ] [注释] ;

修改数据表

修改表名

ALTER TABLE 旧表名 RENAME AS 新表名

添加字段

ALTER TABLE 表名 ADD 字段名 列类型 [属性 修改字段]

修改字段

ALTER TABLE 表名 MODIFY 字段名 列类型 [属性]

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型 [属性]

删除字段

ALTER TABLE 表名 DROP 字段名

删除表

DROP删除

DROP TABLE [ IF EXISTS ] 表名

IF EXISTS 为可选,判断是否存在该数据表

如删除不存在的数据表会抛出错误

DROP为整个删除,是将表中数据与表结构完全删除的一种方式

TRUNCATE删除

TRUNCATE只对表中数据进行删除不会对表定义进行删除  TRUNCATE 速度更快

DELETE删除

根据条件逐行删除

DML

添加数据

INSERT INTO 表名 [(字段名1,字段名2,……..)] values (值1,值2,值3,………);

修改数据

UPDATE  表名  SET  column_name = value [ ,  column_name2 = value2, …. ] [ WHERE  condition ];

删除数据

DELETE    FROM  表名  [ WHERE  condition ];

WHERE条件子句

4.DQL-Data Query Language 数据查询语

(1)根据字段名查询语句

select 字段名1,字段名2,......字段名n from 表名

查询表中所有信息

select * from 表名 (不推荐,效率低下)

一般通过列出所有查询的字段方式来查询内容

通过as子句可将表名数据列名取一个新的别名

select 字段名 as "别名" from 表名

select 别名.字段名 from 表名 as 别名

通过distinct去掉表中相同内容字段

select distinct(字段名) from 表名

在返回列中使用表达式

select 字段名*10 from 表名

(2) where条件语句的使用

逻辑操作符

操作符名称              语法                               描述

AND或&&              a AND b 或 a && b          逻辑与,同时为真结果才为真

OR或||                  a OR b 或 a||b                  逻辑或,只要一个为真,则结果为真

XOR或^               a XOR b                            逻辑异或,不同为真,相同为假

NOT或!             NOT a 或 !a                      逻辑非,若操作数为假,结果则为真

比较操作符

操作符名称          语法                                   描述

IS NULL              a IS NULL                        若操作符为NULL,则结果为真

IS NOT NULL     a IS NOT NULL                若操作符不为NULL,则结果为真

BETWEEN          a BETWEEN b AND c              若a范围在b与c之间则结果为真

LIKE                      a LIKE b                        SQL模式匹配,若a匹配b,则结果为真

IN                         a IN (a1,a2,a3,….)          若a等于a1,a2…中的某一个,则结果为真

BETWEEN

SELECT * FROM SUBJECT WHERE ClassHour BETWEEN 110 AND 120;

SELECT * FROM SUBJECT WHERE ClassHour>=110 AND ClassHour<=120;

IN

SELECT * FROM subject where ClassHour=100 OR ClassHour=110 OR ClassHour=120;

SELECT * FROM SUBJECT WHERE ClassHour IN (100,110,120);

LIKE

SELECT * FROM SUBJECT WHERE SubjectName LIKE "%数学%";

SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE "李__";

_匹配一个任意字

%匹配多个任意字符

(3) 子查询

select 列名1,列名2…..,列名n from (select 列名1,列名2…..,列名n from 表名 ) as 别名

结果集为一条记录时

select 列名1,列名2…..,列名n from 表名 where 列名=(select 列名 from 表名 where 条件)

结果集为多条时

select 列名1,列名2…..,列名n from 表名 where 列名 in (select 列名 from 表名 where 条件)

IF EXISTS

DROP TABLE IF EXISTS 表名

如果该表存在则删除

(4) Group by分组函数

SELECT studentno,SUM(studentresult) AS `sum` FROM result GROUP BY studentno;

(5) 通过having对分组后数据进行筛选

select studentno,avg(studentresult) as `sum` froby studentno having AVG(studentresult)>90;

(6) Order by排序

select * from result order by StudentResult;

默认升序,使用desc进行降序排列

(7) Limit

限制SELECT返回结果的行数

m 制定第一个返回记录行的偏移量

n 制定返回记录行的最大数目

注意

m不指定则偏移量为0,从第一条开始返回前n条记录

LIMIT 常用于分页显示

例子:

SELECT * FROM `result` LIMIT 3 #返回前3条记录

SELECT * FROM `result` LIMIT 2,3 #返回2-3条记录

(8) 常用统计函数

函数名称                 描述

COUNT( )              返回满足SELECT条件的记录总和数,如 SELECT COUNT(1)..

SUM( )                  返回数字字段或表达式列作统计,返回一列的总和

AVG( )                  通常为数值字段或表达列作统计,返回一列的平均值

MAX( )                 可以为数值字段、字符字段或表达式列作统计,返回最大的值

MIN( )                 可以为数值字段、字符字段或表达式列作统计,返回最小的值

(9)连接查询

INNER JOIN内连接

SELECT SubjectName,GradeName FROM subject INNER JOIN grade ON subject.GradeID=grade.GradeID;

            select subject.SubjectName,grade.GradeName from subject,grade where subject.GradeID=grade.GradeID;

AS 关键字

SELECT sub.SubjectName,gra.GradeName FROM SUBJECT AS sub,grade AS gra WHERE sub.GradeID=gra.GradeID;

SELECT sub.SubjectName AS '课程名称',gra.GradeName AS '年级' FROM SUBJECT AS sub,grade AS gra WHERE

sub.GradeID=gra.GradeID

外连接

左外联结(LEFT JOIN)

以左表作为主表进行查询

SELECT studentname,StudentResult FROM student LEFT JOIN result ON student.studentno=student.studentno;

右外联结(RIGHT JOIN)

以右表作为主表进行查询

SELECT studentname,StudentResult FROM student RIGHT JOIN result ON student.studentno=student.studentno;

自连接

CREATE TABLE IF NOT EXISTS category(

categoryId INT(10) AUTO_INCREMENT PRIMARY KEY,

categoryName VARCHAR(32) NOT NULL ,

pid INT(10)

);

select c1.`categoryName`,c2.`categoryName` from category as

c1,category as c2 where c1.`categoryId`=c2.`pid`;

你可能感兴趣的:(二 mysql语句)