MySQL 笔记3 -- SQL 语言

版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83828778

MySQL 笔记3 – SQL 语言


MySQL 系列笔记是笔者学习、实践MySQL数据库的笔记

课程链接: MySQL 数据库基础入门教程
参考文档:
MySQL 官方文档


一、 SQL语言规范


  • SQL关键字、对象名、和列名不区分大小写
  • 字符值和日期值要区分大小写
  • 在应用程序中如果SQL语句文本很长,可以将语句分布到多行上,并且可以通过使用跳格和缩进提高代码的可读性
  • SQL语句以分号(;)结束。

二、 DLL:数据定义(definition)语言


功能 语句
创建数据库 create database 数据库名 character set utf8;
修改数据库 alter database 数据库名 charactor set gbk;
创建表 CREATE TABLE 表名(列名1 类型 [约束],列名2 类型 [约束]);
添加一列 ALTER TABLE 表名 ADD 列名 数据类型;
查看表的字段信息 DESC 表名;
修改表的字段类型 ALTER TABLE 表名 MODIFY 字段名 数据类型;
删除一列 ALTER TABLE 表名 DROP 字段名;
修改表名 RENAME TABLE 原始表名 TO 要修改的表名;
查看表的创建细节 SHOW CREATE TABLE 表名;
修改表的字符集 ALTER TABLE 表名 CHARACTER SET 字符集名称;
修改表的列名 ALTER TABLE 表名 CHANGE 原始列名 新列名 数据类型;
删除表 DROP TABLE 表名;

三、 DML:数据操作(manipulation)语言


1、插入操作

语句:

单行插入:INSERT INTO 表名(列名1,列名2 …)VALUE (列值1,列值2…);
多行插入:INSERT INTO 表名(列名1,列名2 …)VALUES (列值1,列值2…),(列值1,列值2…);

要点:

  • 列名与列值的类型、个数、顺序要一一对应
  • 值不要超出列定义的长度
  • 插入的日期和字符一样,都使用引号括起来
  • 可以省略列名,VALUE 按表头顺序填写

2、更新操作

语句:

更新某几列值:UPDATE 表名 SET 列名1=列值1,列名2=列值2
更新某行的某几列值:UPDATE 表名 SET 列名1=列值1,列名2=列值2 WHERE 列名=值;

要点:

  • 如果列值为数字类型,可以使用运算符

实例: 修改数据库密码

------
# 方法1:适用于旧版
# 进入数据库
use mysql;
# 修改表
update user set password=password('abc') WHERE User='root';
------
# 方法2:适用于新版
# 直接在数据库管理系统中修改
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
# 刷新MySQL的系统权限相关表
flush privileges;
------
# 方法3:适用命令行
mysqladmin -u root -p password 12356

3、删除操作

语句:

删除1:DELETE FROM 表名 [WHERE 列名=值]
删除2:TRUNCATE TABLE 表名;

区别:

  • DELETE 删除表中的数据,表结构还在,删除后的数据可以找回
  • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表,删除的数据不能找回,执行速度比DELETE快

四 、 DQL:数据查询(query)语言


1、基本查询语句

功能 语句
查询所有列 SELECT * FROM 表名;
查询指定列 SELECT 列名1,列名2… FROM 表名;
条件查询 SELECT * FROM 表名 WHERE 条件

2、条件查询

条件查询运行符及关键字:

运行符/关键字 语句
=(等于)、!=(不等于)、<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于); SELECT * FROM 表名 WHERE 列名>=值
BETWEEN…AND;值在什么范围 SELECT * FROM 表名 WHERE 列名 BETWEEN 列值1 AND 列值2;
IN(set);固定的范围值 SELECT * FROM 表名 WHERE 列名 IN(列值1,列值2,…)
IS NULL;(为空)、IS NOT NULL(不为空) SELECT * FROM 表名 WHERE 列名 IS NULL;
AND;与、OR;或、NOT; 非 SELECT * FROM 表名 WHERE 列名1=列值 AND 列名2=列值;

3、模糊查询

语句: SELECT * FROM 表名 WHERE 列名 LIKE 匹配表达式;

通配符:

通配符 说明
_ 任意一个字符
% 任意0~n个字符

常用匹配表达式:

表达式 说明
‘____’ 几个_就表示匹配几个字符
‘%字符%’ 匹配包含某个/些字符的列值
‘字符%’ 匹配以某个/些字符开头的列值
‘%字符’ 匹配以某个/些字符结尾的列值

4、字段控制查询

功能 语句
去除重复记录 SELECT DISTINCT 列名 FROM 表名;
查询结果进行运算,必须都要是数据型 SELECT *,列名1+列名2 FROM 表名;
查询结果进行条件替换 SELECT *,IFNULL(列名,0) FROM 表名;
对查询结果起别名 SELECT *,列名1+列名2 AS 别名 FROM 表名;

5、排序

语句: 可以多级排序
SELECT * FROM 表名 ORDER BY 列名1,列名2 排序类型;

排序类型:

  • ASC:升序,从小到大,默认
  • DESC:降序,从大到小

6、聚合函数

语句:
SELECT 聚合函数(*) AS 别名 FROM 表名;

常用聚合函数:

函数 功能
COUNT() 统计指定列不为NULL的记录行数;
MAX() 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM() 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG() 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

7、分组查询

语句: SELECT 字段名 from 表名 GROUP BY 字段名;

要点:

  • 当 GROUP BY 单独使用时,只显示出每组的第一条记录
  • 在使用分组时,SELECT 后面直接跟的字段一般都出现在 GROUP BY 后

(1)group by + group_concat():

  • GROUP_CONCAT(字段名)可以作为一个输出字段来使用表示分组之后,根据分组结果,使用GROUP_CONCAT()来放置每一组的某字段的值的集合
# 语句
SELECT 字段名,GROUP_CONCAT(字段名) from 表名 GROUP BY 字段名;

# 示例:查询性别名称和各性别的人的名字
SELECT gender,GROUP_CONCAT(name) from employee GROUP BY gender;

(2)group by + 聚合函数:

  • GROUP BY 统计出每个分组的某字段的值的集合,再通过集合函数来对这个"值的集合"做一些操作
# 语句
SELECT 字段名1,聚合函数(字段名2) FROM 表名 GROUP BY 字段名1;

# 示例:查询每个部门的部门名称和每个部门的工资和
SELECT department,SUM(salary) FROM employee GROUP BY department;

(3)group by + having:

  • having 作用和 where 一样,但 having 只能用于 group by
  • having 是在分组后对数据进行过滤,where 是在分组前对数据进行过滤
  • having 后面可以使用分组函数(统计函数),where 不可以
# 语句
SELECT 字段名,聚合函数(字段名) from 表名 GROUP BY 字段名 HAVING 聚合函数(字段名)的条件;

# 示例:各部门个人工资大于2000的总和大于6000,降序排列
SELECT department, SUM(salary) FROM employee WHERE salary >2000 
GROUP BY department HAVING SUM(salary)>6000 ORDER BY SUM(salary) DESC;

8、LIMIT

语句:

SELECT * FROM 表名 LIMIT 参数1, 参数2;

  • 参数1:从哪一行开始查
  • 参数2:要查几行
  • 行数的索引从0开始

示例:

# 分页查询格式
SELECT * FROM 表名 LIMIT (当前页数-1)*每页的行数,每页的行数

# 实例
SELECT * FROM  tabel LIMIT (cyr_page-1)*page_size,page_size

GOOD LUCK!


猜你喜欢

转载自blog.csdn.net/Wang_Jiankun/article/details/83828778