返回列表 发帖

MySQL的SQL语句

笺注:这是在 使用SQLyog远程管理MySQL 的基础上进行的。


使用SQLyog创建一个库data2:
图片1.png
2022-4-14 09:13

代码:
create database data2 default character set utf8mb4 collate utf8mb4_general_ci;


自定义的库data2创建成功:
图片2.png
2022-4-14 09:14



在MySQL服务器本地查看库data2的字符集:
[root@localhost ~]# mysql -u"root" -p"1688" -e "show create database data2;"
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| data2    | CREATE DATABASE `data2` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+-------------------------------------------------------------------+
[root@localhost ~]#

注释:库data2的字符集为 utf8mb4_general_ci



使用SQLyog在库data2里创建一个表t_1:
图片3.png
2022-4-14 09:17

代码:
use data2;

create table t_1(
   id int not null auto_increment,
   name varchar(20) not null,
   grade char(4),
   age float default 13,
   ruxueriqi datetime,
   chinese decimal(50,2),
   math decimal(50,3),
   primary key (id)
);

注释:字段age使用了默认值,默认值为13


使用SQLyog查看库data2中的表t_1的表结构:
图片4.png
2022-4-14 09:17



在MySQL服务器本地查看库data2中的表t_1的表结构:
mysql -u"root" -p"1688" -e "desc data2.t_1;"
图片5.png
2022-4-14 09:18




######

使用SQLyog插入记录:(字段id为主键、标识符列,会自动增长,不用写)
Use data2;

INSERT INTO t_1 (name,grade,age,ruxueriqi,chinese,math) VALUES ('张大白','三年一班',12,'2016-11-5',120,99.5);

INSERT INTO t_1 (name,grade,age,ruxueriqi,chinese,math) VALUES ('张三','三年一班',13,'2017-11-5',108,77);

INSERT INTO t_1 (name,grade,age,ruxueriqi,chinese,math) VALUES ('李小明','三年二班',14,'2018-12-25',-60,48.5);

INSERT INTO t_1 (name,grade,ruxueriqi,chinese,math) VALUES ('zhuohua','三年二班','2017-2-15',60,78.5);

注释:第4条记录的字段age使用了默认值,所以该字段不用写。


在MySQL服务器本地查看库data2中的表t_1的表数据:
mysql -u"root" -p"1688" -e "select * from data2.t_1;"
图片6.png
2022-4-14 09:18




######

使用SQLyog进行查询:

输出表data2.t_1中的所有记录:
SELECT * FROM data2.t_1;
图片7.png
2022-4-14 09:19




只显示前面两条记录:
Use data2;
SELECT * FROM t_1 LIMIT 2;
图片8.png
2022-4-14 09:19




查询中可以只显示某几个字段:
Use data2;
SELECT name,grade,chinese FROM t_1;
图片9.png
2022-4-14 09:20




查询结果中更改字段的内容:(数据实际上没有更改)
Use data2;
SELECT name,grade,'语文成绩优秀' AS chinese FROM t_1 WHERE chinese >= 100;
图片10.png
2022-4-14 09:20

注释:把字段chinese的内容显示为“语文成绩优秀”。



查询结果中更改字段的标题:(标题实际上没有更改)
Use data2;
SELECT name as 姓名,grade as 班级,'语文成绩优秀' AS chinese FROM t_1 WHERE chinese >= 100;
图片11.png
2022-4-14 09:21

注释:在这种情况下,不可以再更改字段chinese的标题了。



截取字段name左边的两个字符:
Use data2;
SELECT LEFT(name,2) AS 姓名左边的两个字符 FROM t_1;
图片12.png
2022-4-14 09:21




截取字段name右边的三个字符:
Use data2;
SELECT RIGHT(name,3) AS 姓名右边的三个字符,grade FROM t_1;
图片13.png
2022-4-14 09:22




从字段name的第2个字符开始截取3个字符:
Use data2;
SELECT SUBSTRING(name,2,3) AS 新值,grade AS 班级 FROM t_1;
图片14.png
2022-4-14 09:22






排序:
Use data2;
SELECT name,chinese FROM t_1 ORDER BY chinese;
图片15.png
2022-4-14 09:23

注释: ORDER BY  排序,默认是升序,从小到大。


Use data2;
SELECT name,chinese FROM t_1 ORDER BY chinese DESC;
图片16.png
2022-4-14 09:24

注释: ORDER BY  排序; DESC  降序,从大到小。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY age,math;
图片17.png
2022-4-14 09:24

注释:先以字段age进行升序;如果字段age的值一样,就以字段math进行升序。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY age,math DESC;
图片18.png
2022-4-14 09:24

注释:先以字段age进行升序;当字段age的值一样时,以字段math进行降序。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY age DESC,math DESC;
图片19.png
2022-4-14 09:25

注释:先以字段age进行降序;当字段age的值一样时,以字段math进行降序。





按日期进行排序:(字段类型datetime也是可以排序的)
Use data2;
SELECT name,grade,ruxueriqi FROM t_1 ORDER BY DATE(ruxueriqi);
图片20.png
2022-4-14 09:26

注释:DATE()函数可以从具体时间中筛选出日期部分。


Use data2;
SELECT name,grade,ruxueriqi FROM t_1 ORDER BY DATE(ruxueriqi) DESC;
图片21.png
2022-4-14 09:26




按日期范围进行查询:
Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE DATE(ruxueriqi) > '2017-2-15';
图片22.png
2022-4-14 09:27



Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE DATE(ruxueriqi) >= '2017-02-15';
图片23.png
2022-4-14 09:28



Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE DATE(ruxueriqi) BETWEEN '2016-1-1' AND '2017-11-5';
图片24.png
2022-4-14 09:28






查询结果中更改字段的标题:(标题实际上没有更改)
Use data2;
SELECT name AS 姓名,DATE(ruxueriqi) AS 入学日期 FROM t_1 WHERE DATE(ruxueriqi) BETWEEN '2016-1-1' AND '2017-11-05';
图片25.png
2022-4-14 09:29



Use data2;
SELECT name AS 姓名,DATE(ruxueriqi) AS 入学日期 FROM t_1 WHERE DATE(ruxueriqi) BETWEEN '2016-01-01' AND '2017-11-05' ORDER BY DATE(ruxueriqi) DESC;
图片26.png
2022-4-14 09:29






等于的写法:
Use data2;
SELECT name,grade FROM t_1 WHERE grade = '三年二班';
图片27.png
2022-4-14 09:30

注释:字符型要使用英文单引号。


Use data2;
SELECT name,age,ruxueriqi FROM t_1 WHERE DATE(ruxueriqi) = '2017-02-15';
图片28.png
2022-4-14 09:30

注释:日期时间型要使用英文单引号。


Use data2;
SELECT name,age,DATE(ruxueriqi) AS 入学日期 FROM t_1 WHERE DATE(ruxueriqi) = '2017-2-15';
图片29.png
2022-4-14 09:32



Use data2;
SELECT id,name FROM t_1 WHERE id = 1 OR id = 3;
图片30.png
2022-4-14 09:32

注释:
OR 或者
整型不要使用英文单引号。


Use data2;
SELECT name,math AS 数学 FROM t_1 WHERE math = 99.5 OR math = 77;
图片31.png
2022-4-14 09:32

注释:数值型不要使用英文单引号。


Use data2;
SELECT name AS Name,math FROM t_1 WHERE name='Zhuohua' OR math IN (99.5,77);
图片32.png
2022-4-14 09:33

注释:
IN 多个等于
关键字不区分英文字母大小写。


Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE name IN ('张三','ZHuohua') OR chinese = 120;
图片33.png
2022-4-14 09:34

注释:
IN 多个等于
关键字不区分英文字母大小写。


Use data2;
SELECT name AS Name,age,math FROM t_1 WHERE age = 13 AND math IN (99.5,78.5);
图片34.png
2022-4-14 09:34

注释:
AND 而且



不等于的写法:
Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name != '张大白';

SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name <> '张大白';
图片35.png
2022-4-14 09:35



Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name != 'Zhuohua';

SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name <> 'zhuohua';
图片36.png
2022-4-14 09:36

注释:
关键字不区分英文字母大小写。


Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name NOT IN ('李小明','Zhuohua');
图片37.png
2022-4-14 09:36

注释:
NOT IN 多个不等于
关键字不区分英文字母大小写。





数值大小比较的写法:(大于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese > 108;
图片38.png
2022-4-14 09:37



数值大小比较的写法:(大于或等于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese >= 108;
图片39.png
2022-4-14 09:37



数值大小比较的写法:(小于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese < 108;
图片40.png
2022-4-14 09:38



数值大小比较的写法:(小于或等于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese <= 108;
图片41.png
2022-4-14 09:38



数值大小比较的写法:(在某个范围之间)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese BETWEEN 60 AND 130;
图片42.png
2022-4-14 09:39






LIKE语句:
Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name LIKE 'zhuohu_';
图片43.png
2022-4-14 09:39

注释:一个下划线代表一个字符。


Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name LIKE 'Zhuoh__';
图片44.png
2022-4-14 09:39

注释:
两个下划线代表两个字符,以此类推。
关键字不区分英文字母大小写。


Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name LIKE '%%';
图片45.png
2022-4-14 09:40

注释: % 代表任意多个字符。





查询中使用加法:(数据实际上没有更改)
Use data2;
SELECT name,chinese,math,chinese+math AS 总成绩 FROM t_1;
图片46.png
2022-4-14 09:41



查询中使用减法:(数据实际上没有更改)
Use data2;
SELECT name,chinese-math AS 新值 FROM t_1;
图片47.png
2022-4-14 09:41



查询中使用乘法:(数据实际上没有更改)
Use data2;
SELECT name,chinese * 2 AS 新值 FROM t_1;
图片48.png
2022-4-14 09:42



查询中使用除法:(数据实际上没有更改)
Use data2;
SELECT name,chinese / 2 AS 新值 FROM t_1;
图片49.png
2022-4-14 09:42



查询中使用加法与乘法:(数据实际上没有更改)
Use data2;
SELECT name,chinese + math * 2 AS 总成绩 FROM t_1;
图片50.png
2022-4-14 09:43

注释:默认是先乘除,后加减。


查询中使用加法与乘法:(加上小括号)
Use data2;
SELECT name,(chinese + math) * 2 AS 总成绩 FROM t_1;
图片51.png
2022-4-14 09:43

注释:可以在小括号里再使用小括号。





聚合函数有5个,分别是COUNT()、SUM()、AVG()、MAX()、MIN()。

求数量:
Use data2;
SELECT COUNT(*) AS 记录数量 FROM t_1;
图片52.png
2022-4-14 09:44



求和:
Use data2;
SELECT SUM(math) AS 数学总成绩 FROM t_1;
图片53.png
2022-4-14 09:44



求平均值:
Use data2;
SELECT AVG(math) AS 数学平均成绩 FROM t_1;
图片54.png
2022-4-14 09:44



求最大值:
Use data2;
SELECT MAX(math) AS 数学最高成绩 FROM t_1;
图片55.png
2022-4-14 09:45



求最小值:
Use data2;
SELECT MIN(math) AS 数学最低成绩 FROM t_1;
图片56.png
2022-4-14 09:45




按字段grade进行分组后,再求字段math的最大值:
Use data2;
SELECT grade,MAX(math) AS 各班级的数学最高成绩 FROM t_1 GROUP BY grade;
图片57.png
2022-4-14 09:46



按字段grade进行分组后,再求字段math的最大值,最后以字段math的最大值进行排序:
Use data2;
SELECT grade,MAX(math) AS 各班级的数学最高成绩 FROM t_1 GROUP BY grade ORDER BY MAX(math);
图片58.png
2022-4-14 09:46




分组再加条件:( group by + having )
Use data2;
select grade as 最高数学成绩小于或等于80的班级,MAX(math) AS 各班级的数学最高成绩 from t_1 group by grade having MAX(math) <= 80;
图片59.png
2022-4-14 09:47



分组再加条件:( group by + having )
Use data2;
select grade as 班级,MAX(math) as 三年一班的数学最高成绩 from t_1 group by grade having grade = '三年一班';
图片60.png
2022-4-14 09:47






更改记录:(假如匹配条件,会一次性更改多条记录)
Use data2;
UPDATE t_1 SET age = 13 WHERE name = '张大白';

SELECT name,age,ruxueriqi FROM t_1 WHERE age = 13;
图片61.png
2022-4-14 09:48




更改记录:(可以一次性更改同一条记录中的多个字段的内容)
Use data2;
UPDATE t_1 SET age = 14,ruxueriqi = '2018-2-15 12:12:2' WHERE name = 'Zhuohua';

SELECT name,age,ruxueriqi FROM t_1 WHERE name = 'zhuohua';
图片62.png
2022-4-14 09:48

注释:关键字不区分英文字母大小写。



查询日期时间型:
Use data2;
SELECT name,DATE(ruxueriqi) AS 日期部分 FROM t_1;
图片63.png
2022-4-14 09:49

注释:DATE()函数可以从具体时间中筛选出日期部分。


Use data2;
SELECT name,DATE(ruxueriqi) AS 日期部分 FROM t_1 WHERE DATE(ruxueriqi) = '2018-2-15';
图片64.png
2022-4-14 09:50



Use data2;
SELECT name,TIME(ruxueriqi) AS 时间部分 FROM t_1;
图片65.png
2022-4-14 09:50

注释:TIME()函数可以从具体时间中筛选出时间部分。


Use data2;
SELECT name,TIME(ruxueriqi) AS 时间部分 FROM t_1 WHERE TIME(ruxueriqi) = '12:12:02';
图片66.png
2022-4-14 09:50

注释:TIME()函数作为关键字时,它的值要写完整。



给字段的值加大:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math + 10 WHERE grade = '三年二班';

SELECT name,grade,math FROM t_1 WHERE grade = '三年二班';
图片67.png
2022-4-14 09:52




给字段的值减小:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math - 10.5 WHERE grade LIKE '三年二%';

SELECT name,grade,math FROM t_1 WHERE grade LIKE '三年二%';
图片68.png
2022-4-14 09:52




可以使用乘法:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math * 2 WHERE grade LIKE '%三年二%';

SELECT name,grade,math FROM t_1 WHERE grade LIKE '%三年二%';
图片69.png
2022-4-14 09:53




也可以使用除法:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math / 2 WHERE grade = '三年二班';

SELECT name,grade,math FROM t_1 WHERE grade = '三年二班';
图片70.png
2022-4-14 09:53






删除记录:(假如匹配条件,会一次性删除多条记录)
Use data2;
DELETE FROM t_1 WHERE name LIKE '%大%';

SELECT * FROM t_1;
图片71.png
2022-4-14 09:54






######
######

使用SQLyog,将表data2.t_1中字段math的值大于或等于77的记录复制到新表data1.t_2:

先复制表结构:
CREATE TABLE data2.t_2 SELECT * FROM data2.t_1 WHERE 1=2;

再复制表数据:(不要复制字段“id”)
INSERT INTO data2.t_2 (name,grade,age,ruxueriqi,chinese,math) SELECT name,grade,age,ruxueriqi,chinese,math FROM data2.t_1 WHERE math >= 77;


上面两条代码执行成功后,查看表data2.t_2的表数据:
SELECT * FROM data2.t_2;
图片72.png
2022-4-14 09:55




最后重建表data2.t_2的字段“id”:
ALTER TABLE data2.t_2 DROP COLUMN id;
ALTER TABLE data2.t_2 ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,ADD PRIMARY KEY(`id`);


上面两条代码执行成功后,再查看表data2.t_2的表数据:
SELECT * FROM data2.t_2;
图片73.png
2022-4-14 09:55



在MySQL服务器本地查看库data2中的表t_2的表结构:
mysql -u"root" -p"1688" -e "desc data2.t_2;"
图片74.png
2022-4-14 09:56






######

清空指定的表中的所有数据:(字段“id”会从1重新开始)
TRUNCATE TABLE data2.t_2;

删除指定的表:
DROP TABLE data2.t_2;

删除指定的库:
DROP DATABASE data2;





MySQL的字段类型:
  1. bigint  整型  不能用 int 描述的超大整数

  2. int  整型  可以存储 -20亿 到 20亿 之间的整数

  3. smallint  整型  可以存储 -32000 到 32000 之间的整数

  4. tinyint  整型  可以存储 -128 到 127 之间的整数



  5. datetime  日期时间型  格式为 yyyy-mm-dd hh:mm:ss



  6. float  数值型  可以存储6个有效位数,可以有小数,正负都可以的

  7. decimal(p, s)  数值型  p指的是有效位数(最小为1,最大为65)  s指的是小数位数( 0 <= s < p )  整数位数为p-s  ,正负都可以的



  8. char  字符型  可以存储255个任意字符,一般用于存储固定长度的字符串

  9. varchar  字符型  可以存储255个任意字符,一般用于存储可变长度的字符串

  10. text  字符型  可以存储65535个任意字符,一般用于存储可变长度的字符串

  11. mediumtext  字符型  可以存储1千多万个任意字符,一般用于存储可变长度的字符串

  12. longtext  字符型  可以存储40亿个任意字符,一般用于存储可变长度的字符串
复制代码




相关文章:
MySQL的字符集

Windows2008R2_安装MySQL5.5
Windows2012R2_安装MySQL5.5

Zabbix5.0.12_调用Shell脚本监控Linux下的MySQL
Zabbix5.0.12_调用Python3脚本监控Linux下的MySQL

Python3脚本管理Linux下的MySQL

MSSQL的SQL语句
Oracle的SQL语句

返回列表