blog.zhuohua.store's Archiver

admin 发表于 2019-12-8 15:35

MySQL的SQL语句

笺注:这是在 [url=http://blog.zhuohua.store/viewthread.php?tid=230&extra=page%3D1]使用SQLyog远程管理MySQL[/url] 的基础上进行的。


使用SQLyog创建一个库data2:
[attach]19490[/attach]
代码:
create database [color=Blue]data2[/color] default character set utf8mb4 collate utf8mb4_general_ci;


自定义的库data2创建成功:
[attach]19491[/attach]


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

注释:库data2的字符集为 [color=Blue]utf8mb4_general_ci[/color]



使用SQLyog在库data2里创建一个表t_1:
[attach]19492[/attach]
代码:
use data2;

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

注释:字段[color=Blue]age[/color]使用了默认值,默认值为13


使用SQLyog查看库data2中的表t_1的表结构:
[attach]19493[/attach]


在MySQL服务器本地查看库data2中的表t_1的表结构:
mysql -u"root" -p"1688" -e "desc data2.t_1;"
[attach]19494[/attach]



######

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

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

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

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

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

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


在MySQL服务器本地查看库data2中的表t_1的表数据:
mysql -u"root" -p"1688" -e "select * from data2.t_1;"
[attach]19495[/attach]



######

使用SQLyog进行查询:

输出表data2.t_1中的所有记录:
SELECT * FROM data2.t_1;
[attach]19496[/attach]



只显示前面两条记录:
Use data2;
SELECT * FROM t_1 [color=DarkRed]LIMIT 2[/color];
[attach]19497[/attach]



查询中可以只显示某几个字段:
Use data2;
SELECT [color=Blue]name,grade,chinese[/color] FROM t_1;
[attach]19498[/attach]



查询结果中更改字段的内容:(数据实际上没有更改)
Use data2;
SELECT name,grade,'[color=Blue]语文成绩优秀[/color]' AS chinese FROM t_1 WHERE chinese >= 100;
[attach]19499[/attach]
注释:把字段chinese的内容显示为“语文成绩优秀”。



查询结果中更改字段的标题:(标题实际上没有更改)
Use data2;
SELECT name as [color=Blue]姓名[/color],grade as [color=Blue]班级[/color],'语文成绩优秀' AS chinese FROM t_1 WHERE chinese >= 100;
[attach]19500[/attach]
注释:在这种情况下,不可以再更改字段chinese的标题了。



截取字段name左边的两个字符:
Use data2;
SELECT [color=DarkRed]LEFT[/color](name,[color=Blue]2[/color]) AS 姓名左边的两个字符 FROM t_1;
[attach]19501[/attach]



截取字段name右边的三个字符:
Use data2;
SELECT [color=DarkRed]RIGHT[/color](name,[color=Blue]3[/color]) AS 姓名右边的三个字符,grade FROM t_1;
[attach]19502[/attach]



从字段name的第2个字符开始截取3个字符:
Use data2;
SELECT [color=DarkRed]SUBSTRING[/color](name,[color=Blue]2,3[/color]) AS 新值,grade AS 班级 FROM t_1;
[attach]19503[/attach]





排序:
Use data2;
SELECT name,chinese FROM t_1 [color=Blue]ORDER BY[/color] chinese;
[attach]19504[/attach]
注释: [color=Blue]ORDER BY[/color]  排序,默认是升序,从小到大。


Use data2;
SELECT name,chinese FROM t_1 [color=Blue]ORDER BY[/color] chinese [color=DarkRed]DESC[/color];
[attach]19505[/attach]
注释: [color=Blue]ORDER BY[/color]  排序; [color=DarkRed]DESC[/color]  降序,从大到小。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY [color=Blue]age,math[/color];
[attach]19506[/attach]
注释:先以字段age进行升序;如果字段age的值一样,就以字段math进行升序。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY age,math [color=DarkRed]DESC[/color];
[attach]19507[/attach]
注释:先以字段age进行升序;当字段age的值一样时,以字段math进行降序。


Use data2;
SELECT name,age,math FROM t_1 ORDER BY age [color=DarkRed]DESC[/color],math [color=DarkRed]DESC[/color];
[attach]19508[/attach]
注释:先以字段age进行降序;当字段age的值一样时,以字段math进行降序。





按日期进行排序:(字段类型datetime也是可以排序的)
Use data2;
SELECT name,grade,ruxueriqi FROM t_1 ORDER BY [color=DarkRed]DATE[/color](ruxueriqi);
[attach]19509[/attach]
注释:[color=DarkRed]DATE()[/color]函数可以从具体时间中筛选出日期部分。


Use data2;
SELECT name,grade,ruxueriqi FROM t_1 ORDER BY DATE(ruxueriqi) [color=DarkRed]DESC[/color];
[attach]19510[/attach]



按日期范围进行查询:
Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE [color=DarkRed]DATE[/color](ruxueriqi) [color=Blue]>[/color] '2017-2-15';
[attach]19511[/attach]


Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE [color=DarkRed]DATE[/color](ruxueriqi) [color=Blue]>=[/color] '2017-02-15';
[attach]19512[/attach]


Use data2;
SELECT name,ruxueriqi FROM t_1 WHERE DATE(ruxueriqi) [color=Blue]BETWEEN[/color] '2016-1-1' [color=Blue]AND[/color] '2017-11-5';
[attach]19513[/attach]





查询结果中更改字段的标题:(标题实际上没有更改)
Use data2;
SELECT name AS [color=Blue]姓名[/color],DATE(ruxueriqi) AS [color=Blue]入学日期[/color] FROM t_1 WHERE DATE(ruxueriqi) BETWEEN '2016-1-1' AND '2017-11-05';
[attach]19514[/attach]


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;
[attach]19515[/attach]





等于的写法:
Use data2;
SELECT name,grade FROM t_1 WHERE grade [color=Blue]=[/color] '三年二班';
[attach]19516[/attach]
注释:字符型要使用英文单引号。


Use data2;
SELECT name,age,ruxueriqi FROM t_1 WHERE [color=DarkRed]DATE[/color](ruxueriqi) [color=Blue]=[/color] '2017-02-15';
[attach]19517[/attach]
注释:日期时间型要使用英文单引号。


Use data2;
SELECT name,age,[color=DarkRed]DATE[/color](ruxueriqi) AS 入学日期 FROM t_1 WHERE [color=DarkRed]DATE[/color](ruxueriqi) [color=Blue]=[/color] '2017-2-15';
[attach]19518[/attach]


Use data2;
SELECT id,name FROM t_1 WHERE id [color=Blue]=[/color] 1 [color=DarkRed]OR[/color] id [color=Blue]=[/color] 3;
[attach]19519[/attach]
注释:
[color=DarkRed]OR[/color] 或者
整型不要使用英文单引号。


Use data2;
SELECT name,math AS 数学 FROM t_1 WHERE math [color=Blue]=[/color] 99.5 OR math [color=Blue]=[/color] 77;
[attach]19520[/attach]
注释:数值型不要使用英文单引号。


Use data2;
SELECT name AS Name,math FROM t_1 WHERE name[color=Blue]=[/color]'Zhuohua' OR math [color=DarkRed]IN[/color] (99.5,77);
[attach]19521[/attach]
注释:
[color=DarkRed]IN[/color] 多个等于
关键字不区分英文字母大小写。


Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE name [color=DarkRed]IN[/color] ('张三','ZHuohua') OR chinese [color=Blue]=[/color] 120;
[attach]19522[/attach]
注释:
[color=DarkRed]IN[/color] 多个等于
关键字不区分英文字母大小写。


Use data2;
SELECT name AS Name,age,math FROM t_1 WHERE age = 13 [color=DarkRed]AND[/color] math IN (99.5,78.5);
[attach]19523[/attach]
注释:
[color=DarkRed]AND[/color] 而且



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

SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name [color=Blue]<>[/color] '张大白';
[attach]19524[/attach]


Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name [color=Blue]!=[/color] 'Zhuohua';

SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name [color=Blue]<>[/color] 'zhuohua';
[attach]19525[/attach]
注释:
关键字不区分英文字母大小写。


Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name [color=DarkRed]NOT IN[/color] ('李小明','[color=Blue]Zhuohua[/color]');
[attach]19526[/attach]
注释:
[color=DarkRed]NOT IN[/color] 多个不等于
关键字不区分英文字母大小写。





数值大小比较的写法:(大于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese [color=Blue]>[/color] 108;
[attach]19527[/attach]


数值大小比较的写法:(大于或等于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese [color=Blue]>=[/color] 108;
[attach]19528[/attach]


数值大小比较的写法:(小于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese [color=Blue]<[/color] 108;
[attach]19529[/attach]


数值大小比较的写法:(小于或等于)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese [color=Blue]<=[/color] 108;
[attach]19530[/attach]


数值大小比较的写法:(在某个范围之间)
Use data2;
SELECT name,chinese AS 语文 FROM t_1 WHERE chinese [color=Blue]BETWEEN[/color] 60 [color=Blue]AND[/color] 130;
[attach]19531[/attach]





LIKE语句:
Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name [color=Blue]LIKE[/color] 'zhuohu[color=DarkRed]_[/color]';
[attach]19532[/attach]
注释:一个下划线代表一个字符。


Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name [color=Blue]LIKE[/color] 'Zhuoh[color=DarkRed]__[/color]';
[attach]19533[/attach]
注释:
两个下划线代表两个字符,以此类推。
关键字不区分英文字母大小写。


Use data2;
SELECT name,chinese AS 语文成绩 FROM t_1 WHERE name [color=Blue]LIKE[/color] '[color=DarkRed]%[/color]白[color=DarkRed]%[/color]';
[attach]19534[/attach]
注释: [color=DarkRed]%[/color] 代表任意多个字符。





查询中使用加法:(数据实际上没有更改)
Use data2;
SELECT name,chinese,math,[color=Blue]chinese+math[/color] AS 总成绩 FROM t_1;
[attach]19535[/attach]


查询中使用减法:(数据实际上没有更改)
Use data2;
SELECT name,[color=Blue]chinese-math[/color] AS 新值 FROM t_1;
[attach]19536[/attach]


查询中使用乘法:(数据实际上没有更改)
Use data2;
SELECT name,[color=Blue]chinese * 2[/color] AS 新值 FROM t_1;
[attach]19537[/attach]


查询中使用除法:(数据实际上没有更改)
Use data2;
SELECT name,[color=Blue]chinese / 2[/color] AS 新值 FROM t_1;
[attach]19538[/attach]


查询中使用加法与乘法:(数据实际上没有更改)
Use data2;
SELECT name,[color=Blue]chinese + math * 2[/color] AS 总成绩 FROM t_1;
[attach]19539[/attach]
注释:默认是先乘除,后加减。


查询中使用加法与乘法:(加上小括号)
Use data2;
SELECT name,[color=Blue](chinese + math) * 2[/color] AS 总成绩 FROM t_1;
[attach]19540[/attach]
注释:可以在小括号里再使用小括号。





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

求数量:
Use data2;
SELECT [color=Blue]COUNT[/color](*) AS 记录数量 FROM t_1;
[attach]19541[/attach]


求和:
Use data2;
SELECT [color=Blue]SUM[/color](math) AS 数学总成绩 FROM t_1;
[attach]19542[/attach]


求平均值:
Use data2;
SELECT [color=Blue]AVG[/color](math) AS 数学平均成绩 FROM t_1;
[attach]19543[/attach]


求最大值:
Use data2;
SELECT [color=Blue]MAX[/color](math) AS 数学最高成绩 FROM t_1;
[attach]19544[/attach]


求最小值:
Use data2;
SELECT [color=Blue]MIN[/color](math) AS 数学最低成绩 FROM t_1;
[attach]19545[/attach]



按字段grade进行分组后,再求字段math的最大值:
Use data2;
SELECT grade,[color=Blue]MAX[/color](math) AS 各班级的数学最高成绩 FROM t_1 [color=DarkRed]GROUP BY[/color] grade;
[attach]19546[/attach]


按字段grade进行分组后,再求字段math的最大值,最后以字段math的最大值进行排序:
Use data2;
SELECT grade,[color=Blue]MAX[/color](math) AS 各班级的数学最高成绩 FROM t_1 GROUP BY grade ORDER BY [color=Blue]MAX[/color](math);
[attach]19547[/attach]



分组再加条件:( group by + having )
Use data2;
select grade as 最高数学成绩小于或等于80的班级,[color=Blue]MAX[/color](math) AS 各班级的数学最高成绩 from t_1 group by grade having [color=Blue]MAX[/color](math) <= 80;
[attach]19548[/attach]


分组再加条件:( group by + having )
Use data2;
select grade as 班级,[color=Blue]MAX[/color](math) as 三年一班的数学最高成绩 from t_1 group by grade having grade = '三年一班';
[attach]19549[/attach]





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

SELECT name,age,ruxueriqi FROM t_1 WHERE age = 13;
[attach]19550[/attach]



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

SELECT name,age,ruxueriqi FROM t_1 WHERE name = 'zhuohua';
[attach]19551[/attach]
注释:关键字不区分英文字母大小写。



查询日期时间型:
Use data2;
SELECT name,[color=DarkRed]DATE[/color](ruxueriqi) AS 日期部分 FROM t_1;
[attach]19552[/attach]
注释:[color=DarkRed]DATE()[/color]函数可以从具体时间中筛选出日期部分。


Use data2;
SELECT name,[color=DarkRed]DATE[/color](ruxueriqi) AS 日期部分 FROM t_1 WHERE [color=DarkRed]DATE[/color](ruxueriqi) = '2018-2-15';
[attach]19553[/attach]


Use data2;
SELECT name,[color=DarkRed]TIME[/color](ruxueriqi) AS 时间部分 FROM t_1;
[attach]19554[/attach]
注释:[color=DarkRed]TIME()[/color]函数可以从具体时间中筛选出时间部分。


Use data2;
SELECT name,TIME(ruxueriqi) AS 时间部分 FROM t_1 WHERE [color=DarkRed]TIME[/color](ruxueriqi) = '[color=Blue]12:12:02[/color]';
[attach]19555[/attach]
注释:[color=DarkRed]TIME()[/color]函数作为关键字时,它的值要写完整。



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

SELECT name,grade,math FROM t_1 WHERE grade = '三年二班';
[attach]19556[/attach]



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

SELECT name,grade,math FROM t_1 WHERE grade LIKE '三年二%';
[attach]19557[/attach]



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

SELECT name,grade,math FROM t_1 WHERE grade LIKE '%三年二%';
[attach]19558[/attach]



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

SELECT name,grade,math FROM t_1 WHERE grade = '三年二班';
[attach]19559[/attach]





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

SELECT * FROM t_1;
[attach]19560[/attach]





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

使用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;
[attach]19561[/attach]



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


上面两条代码执行成功后,再查看表data2.t_2的表数据:
SELECT * FROM data2.t_2;
[attach]19562[/attach]


在MySQL服务器本地查看库data2中的表t_2的表结构:
mysql -u"root" -p"1688" -e "desc data2.t_2;"
[attach]19563[/attach]





######

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

删除指定的表:
DROP TABLE [color=Blue]data2.t_2[/color];

删除指定的库:
DROP DATABASE [color=Blue]data2[/color];





MySQL的字段类型:
[code]
bigint  整型  不能用 int 描述的超大整数

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

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

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



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



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

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



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

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

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

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

longtext  字符型  可以存储40亿个任意字符,一般用于存储可变长度的字符串

[/code]



相关文章:
[url=http://blog.zhuohua.store/viewthread.php?tid=234&page=1&extra=#pid237]MySQL的字符集[/url]

[url=http://blog.zhuohua.store/viewthread.php?tid=90&extra=page%3D1]Windows2008R2_安装MySQL5.5[/url]
[url=http://blog.zhuohua.store/viewthread.php?tid=125&page=1&extra=#pid126]Windows2012R2_安装MySQL5.5[/url]

[url=http://blog.zhuohua.store/viewthread.php?tid=520&page=1&extra=#pid948]Zabbix5.0.12_调用Shell脚本监控Linux下的MySQL[/url]
[url=http://blog.zhuohua.store/viewthread.php?tid=521&page=1&extra=#pid949]Zabbix5.0.12_调用Python3脚本监控Linux下的MySQL[/url]

[url=http://blog.zhuohua.store/viewthread.php?tid=152&page=1&extra=#pid153]Python3脚本管理Linux下的MySQL[/url]

[url=http://blog.zhuohua.store/viewthread.php?tid=200&extra=page%3D1]MSSQL的SQL语句[/url]
[url=http://blog.zhuohua.store/viewthread.php?tid=458&page=1&extra=#pid886]Oracle的SQL语句[/url]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.