MySQL语言

MySQL语言概述

MySQL语言主要分为以下几种:
(1)DDL(Data Definition Language):
数据定义语言.用于数据库、数据表的定义

(2)DML(Data Manipulation Language):
数据操作语言.用于操作表格记录(插入、更新、删除)

(3)DCL(Data Control Language):
数据控制语言.创建用户、分配权限、设置安全级别

(4)DQL(Data Query Language):
数据查询语言
注意:所有的语句可根据自己的喜好大写小写都可以
所有语句以英文字符的 " ; "结尾

DDL(Data Definition Language)数据定义语言的语法

显示所有数据库

SHOW DATABASES;

创建数据库

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

删除数据库

DROP DATABASE[IF EXISTS] 数据库名;

修改数据库的编码

ALTER DATABASE 数据库名 CHARACTER SET 字符集名;

创建表

#首先得切换到需要建表的数据库下:
USE 数据库名;
#创建表
GREATE TABLE[IF NOT EXISTS] 表名 (
列名1	数据类型1;
列名2	数据类型2;
...............
);

查看表结构

DESC 表名;

删除表格

DROP 表名;

修改表

a.往表内添加列

ALTER TABLE 表名 ADD (
列名 数据类型,
列名 数据类型,
...........
);

b.修改列的数据类型:

ALTER TABLE 表名 MODIFY 列名 新数据类型;

c.修改列名:

ALTER TABLE 表名 
CHANGE 原列名 新列名 数据类型;

d.删除列:

ALTER TABLE 表名 DROP 列名;

e.修改表名称:

ALTER TABLE 原表名 RENAME TO 新表名;

DML(Data Manipulation Language) 数据操作语言的用法

插入数据

#向指定列插入数据
#插入的数据的顺序必须对应列名的顺序
INSERT INTO 表名 (列名1,列名2,....) VALUES (1对应的数据,列2对应的数据.....);

#向所有列插入数据时可以不用写列名,但是数据必须与列的顺序相对应
INSERT INTO 表名 VALUES (1对应的数据,列2对应的数据.....);

修改数据

# WHERE 语句写入修改条件,没有条件可以不写
UPDATE 表名 SET 列名1 =1,  …  列名n = 值n  [WHERE 条件];

删除数据

 # 删除满足条件的记录:
 # 若没有where子句,则删除表格中的所有记录,保留表结构
 DELETE [列名1,列名2,...]  FROM  表名  [WHERE 条件];
 
 # 删除数据:
 TRUNCATE  TABLE  表名;

注:
DELETE 和 TRUNCATE 的区别

(a)TRUNCATE 删除过程是先drop table,然后再create Table 效率比 DELETE 高

(b)TRUNCATE 删除无法回滚, DELETE 删除可以回滚

DCL(Data Control Language) 数据控制语言

创建用户

 CREATE  USER  '用户名'@地址  IDENTIFIED  BY  '密码';

DQL(Data Query Language) 数据查询语言

基础查询

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

# 查询指定列
SELECT 列名1,列名2... FROM 表名 ;

#有条件的查询
SELECT [列名1,列名2...] FROM 表名 WHERE [条件] ;

条件查询

条件运算符:

> (大于),< (小于),>= (大于等于),<= (小于等于),<> (不等于),= (等于)

谓词:

# 两个值之间,包含两个值
BETWEEN a AND b ;
#存在于
IN
#不存在于
NOT IN
#或者
OR
#和
AND
#非
NOT
#为空
IS NULL;

模糊查询

类似于Java中的字符串匹配,可以匹配一个字符,也可以匹配多个字符

#使用模糊查询的时候主要使用  'LIKE' 进行匹配

%  :表示0个或多个字符,可以匹配任意类型和长度的字符
SELECT * FROM table WHERE name LIKE '刘%';(从table中查询name列为'刘'开头的所有行

_  :表示任意单个字符
SELECT * FROM table WHERE name LIKE '刘_';(从table中查询name列为'刘*'的所有行

字段控制查询

#去重主要使用'DISTINCT'关键字
SELECT DISTINCT name FROM Stu;Stu表中查询所有不重复的名字
 
#查询时对列进行计算
SELECT Score*10 FROM Stu;Score列的所有值分别*10

#查询时使用'IFNULL'null值转为0
SELECT Score IFNUll FROM Stu;Stu表中查询Score,如果 Score值为NUll 则表现为0

#给列添加别名
SELECT c.Score core FROM Stu c;
'c'是表Stu的别名 core是 c.Score 的别名

#使用'ORDER BY'对查询数据进行排序;'DESC'为降序,'ASC'为升序;不写默认为升序
SELECT * FROM Stu ORDER BY  score DESC;
查询结果根据score的降序排列
SELECT * FROM Stu ORDER BY score ASC;
查询结果根据score的升序排列

聚合函数·

# COUNT(列名) 计算有多少条记录
SELECT COUNT(Score) FROM Student;

#SUM(列名) 计算列所有值的和
SELECT SUM(Score) FROM Student;

#AVG(列名) 计算列的所有值的平均值
SELECT AVG(Score) FROM Student;

#MAX(列名) 计算列的所有值的最大值
SELECT MAX(Score) FROM Student;

#MIN(列名) 计算列的所有值的最小值
SELECT MIN(Score) FROM Student;

分组查询

#使用'GROUP BY'进行分组
SELECT * FROM Stu GROUP BY (Score);Score的值进行分组查询

#'GROUP BY' 搭配 'HAVING' 进行查询,'HAVING' 后跟条件
SELECT * FROM Stu GROUP BY (Score) HAVING Score>80;Score的值进行分组查询,选其中Score值大于80

分页查询

使用'LIMIT'关键字进行查询
SELECT * FROM Stu LIMIT 0,2;
查询前两行

多表连接查询

#表与表的并集使用 'UNION'
#把具有**相同字段数目和字段类型**的两个或多个表合并到一起
SELECT * FROM dept UNION SELECT * FROM dept;

#连接(JOIN):
#内连接(INNER JOIN... ON):INNER JOIN...ON...
SELECT * FROM emp INNER JOIN dept ON emp.deptno=dept.deptno;
通过两个表的deptno值相等,将两个表连接起来

#左外连接(LEFT JOIN....ON....):
又称为左连接。保留左表中的所有记录,右表中没有匹配的记录显示为Null
SELECT * FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;

#右外连接(RIGHT JOIN....ON....):
#又称为右连接。保留右表中的所有记录,左表中没有匹配的记录显示为Null
SELECT * FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno;

多表连接查询的缺点:性能差.(先进行两个表的笛卡尔积,然后再从笛卡尔积中找出满足条件的记录)

子查询

子查询就是查询语句的嵌套

(1)from子句中的子查询:返回一个临时的表,然后从临时表查询符合条件的记录
SELECT * FROM (SELECT * FROM emp);
#将'SELECT * FROM emp'查询出的当作一个表		
		
(2)where子句中的子查询:子查询的返回值作为主查询的查询条件
SELECT sid FROM emp WHERE sid IN (SELECT sid FROM stu);
SELECT sid FROM emp WHERE sid =ANY (SELECT sid FROM stu);
SELECT sid FROM emp WHERE sid IN ALL(SELECT sid FROM stu);
SELECT sid FROM emp WHERE sid EXISTS (SELECT sid FROM stu);

#将'sid IN (SELECT sid FROM stu)'作为条件

子查询常用关键字:

IN,ANY,ALL,EXISTS

#'IN' 'ANY' 意为'存在' 
SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
SELECT * FROM emp WHERE deptno =ANY(SELECT deptno FROM dept);
#'=ANY''IN'的查询意义是一样的

#'ALL'
SELECT * FROM emp WHERE deptno =ALL(SELECT deptno FROM dept);

#'EXISTS'
SELECT empno FROM emp WHERE EXISTS(SELECT empno FROM emp WHERE job='SALESMAN'); 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值