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]