mysql基本命令

2022-06-27 11:46:33 浏览数 (2)

代码语言:javascript复制
-- 数据库(windows下不分大小写)
-- 登录:(-u名字 -p密码)
mysql -uroot -p

-- 退出:
exit;

-- 创建数据库:
create database 数据库名字;

-- 显示所有数据库:
show databases;

-- 删除数据库:
drop database 数据库名字;

-- 使用数据库:
use 数据库名;

-- 创建数据表:(除了varchar之外的约束可不写)
create table 表名(
	列名1 数据类型(约束),
	列名2 数据类型(约束),
	列名3 数据类型(约束)
);

-- 显示所有数据表:
show tables;

-- 查看表中结构:
desc 表名;

代码语言:javascript复制
-- 向表中添加数据:(insert)
insert into 表名(列1,列2,列3) values (值1,值2,值3);

-- 格式2:
-- 当<所有值>都要写入时,可不用列名
insert into 表名 values (值1,值2,值3,值4);

-- 格式3:
-- 批量写入
insert into 表名 (列1,列2,列3...) values (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...)...;

-- 自动增长:
primary key AUTO_INCREMENT

-- 设置编码格式:(中文乱码或无法添加中文)
set names 'gbk';

-- 删除数据表:
drop table 表名;

-- 在已有的表上,添加一个字段:
alter table 表名 add 列名 数据类型;

-- 修改某列长度:
alter table 表名 modify 列名 数据类型(约束长度);

-- 删除某一列:
alter TABLE 表名 drop 列名;

-- 查看表格的创建细节:
show create table 表名;

-- 修改表名:
rename table 旧表名 to 新表名;

-- 修改列信息:
alter table 表名 change 旧列名 新列名 数据类型(约束);
代码语言:javascript复制
-- 查询指定列的数据:
select 列1,列2 from 表名;

-- 查询所有列:
select * from 表名;

-- 去重:(关键字:distinct)[去掉该列中的重复项]
select distinct 列名 from 表名;

-- 查询并临时修改列名:(关键字:as)
select 列名 as '临时列名' from 表名;

-- 查询时进行数据运算:(该列中的内容值全部加10)
select 列名 10 from 表名;

-- $条件查询:(关键字:where)<where后跟查询条件>
-- 1.查询指定列中的所有指定项:
select * from 表名 where 列名='要查询的内容';

-- 2.查询指定列中所有大于<规定值>(不包括规定值)的项:
select * from 表名 where 列名>规定值;

#条件的写法:
id = 6; 等于
id <> 6; 不等于
id <= 6; 小于等于
id in(1,3,4,5,6) 包含
id not in (1,2,3,4,5,6) 不包含
and 与/和
or 或
not 非

-- 3.查询指定列在指定区间内的值:(所有该列10~20之间的项<包含>)
-- 写法1:select * from 表名 where 列名>=10 and 列名<=20;
-- 使用(关键字:between)要求"<and前面的值必须要小于后面的值>"
-- 写法2:select * from 表名 where 列名 between 10 and 20;

-- 4.查询指定列中所有10,11,19的项:
select * from 表名 where 列名=10 or 列名=11 or 列名=19;
-- ↓
-- 优化,改造成in方式:(in为包含,not in为排除)
selcet * from 表名 where 列名 in (10,11,19);

-- $模糊查询(关键字:like) 配合通配符使用:
-- %:表示多个字符;
-- _:(下划线)表示一个字符;
-- 1.查询含有指定内容的单元数据:(显示出了该列中所有所有'指定字符'的数据)
select * from 表名 where 列名 like '%指定字符%';

-- 指定字符% :显示出该列中以指定字符开头的数据;
-- %指定字符 :显示出该列中以指定字符结尾的数据;

-- 2.查询指定长度的单元数据:(五个下滑线表示长度为5的单元数据)
select * from 表名 where 列名 like '_____';

-- 3.查询不为空的数据:
select * from 表名 where 列名  is not null;
-- 或
select * from 表名 where not (列名 is null);
-- ↓扩展:
select * from 表名 where not (列名1 is null and 列名2 is null);

-- 注:条件组装也就是用and,or来组装条件,条件组装是有优先级的,可以用小括号()来括起来.
代码语言:javascript复制
-- $排序查询(关键字:order by)
-- 1.根局规定列的值升序排序查询;
-- ↓默认是升序(或者asc关键字)
select * from 表名 order by 列名;

-- 2.根局规定列的值降序排序查询;
-- ↓降序排序(desc)
select * from 表名 order by 列名 desc;

-- 结合排序查询与条件查询
-- 先过滤条件,再进行排序:
-- 查询列1中所有包含'张三'的字段信息,并根局列2中值的大小进行降序排序;
select * from 表名 where 列名1 like '%张三%' order by 列2 desc;
-- 注:尽量不要对中文进行排序,很迷~

-- 聚合函数:(对一列的值进行计算,返回单一的一个值!)
-- count :统计个数.(null 不计)
-- sum: 求和
-- max: 最大值
-- min: 最小值
-- avg: 平均值

-- ===count,求和,对指定列的[数据个数]求和 count(列名).就是看该列有多少条数据.
-- select count(*) from 表名;(查询该表中一共有多少条数据)
-- ↑其中*代表所有列

select count(*) as 'a' from 表名;
-- ↑返回的数据名'a'默认为函数名,在此处也就是count(*),可以进行修改↑;

-- ===sum,求和,对指定列的[数据值]求和 sum(列名),就是看该列中所有值相加的和.
select sum(列名) from 表名;
-- 注意:列的类型:汉字不能求和;若有汉字,按0计算,对不是数据类型的数据,计0运算.

-- 可以与条件查询结合↓  (查询列2中所有包含'张三'的字段,并求出其中所有列1的值的和).
select sum(列1) from 表名 where 列2 like '%张三%';

-- ===max/min,最大值/最小值
select max(列名) from 表名;(获取到该列最大值)

-- ===avg,计算指定列中所有数据的平均数
select avg(列名) from 表名;(获取到该列平均值)

-- 注意:空值在计算时直接忽略
-- 结:聚合函数的返回值,只有一个值.
--    对数据类型有要求

-- $分组查询(关键字:group by)
-- 跟随聚合函数使用:group by(被分组的列名);
-- select查询时,被分组的列要出现在select选择列后面;
-- ↓按照列2的相同内容对列1进行求和并显示
select sum(列1),列2 from 表名 group by 列2;

--  :结合条件查询时,条件在前↓:
select sum(列1),列2 from 表名 where 列2 like '%张三%' group by 列2;
-- 按照列2中的'张三'内容对列1进行求和并显示;

--  增加排序,排序要加在最后
select sum(列1),列2 from 表名 where 列2 like '%张三%' group by 列2 order by sum(列1) desc;
-- 按照列2中的'张三'内容对列1进行求和并按降序显示;

--  可以用as临时命名一个函数[sum(列1)],但后面的函数就要相应做出改变;
select sum(列1) as 'a',列2 from 表名 where 列2 like '%张三%' group by 列2 order by a desc;
代码语言:javascript复制
-- 修改指定列数据:
update 表名 set 列1=值1,列2=值2,...  where 条件;
-- 在原来的基础上添加前缀或后缀;
update 表名 set 列1=concat('qf',列1) where 条件;

-- 删除:
delete from 表名 where 条件;

-- 效率高,速度快,无法回滚数据.
truncate table 表名;
代码语言:javascript复制
-- $ having
-- 作用类似于where条件;
-- having于where的区别:
-- having 是在分组后对数据进行过滤
-- where 是在分组前对数据进行过滤

-- 在之前的例子中:我们要对已经得到的数据再进行一个筛选:
-- 比如说在得到的数据中,我们只需要列1大于18的所有值,这是在代码后再加一个where是行不通的,在前一个where后加条件
-- 也不行!这时就要用到having;

select sum(列1),列2 from 表名 where 列2 like '%张三%' group by 列2 having sum(列1) > 18;
-- 按照列2中的'张三'内容对列1进行求和并按降序显示且只显示 sum(列1) 的值大于18的内容;

-- $分组查询:(关键词:limit x,y)
-- x:表示从第几行开始显示(不包括x行,x为0时,可省略不写)
-- y:表示一次显示及行(y为-1时,表示表末位)
select * from 表名 order by 列1 desc limit 2,5;

合并查询:(关键字:union)

1.(查询语句1) union (查询语句2)#:重复数据只显示一遍

作用:将两条查询语句返回的结果合并到一起

2.(查询语句1) union ALL (查询语句2)#:显示所有数据

要求:被合并的两个结果集,列数.类型必须相同

连接查询:(关键字:xxx join on)

1.左连接:left join 表名 on (表1列 = 表2列)

2.右连接:right join on

3.内连接:inner join on

select * from 表1 left join 表2 on (表1和表2共同的条件)

4.外连接:outer join on

连接不仅限于2张表,也可以是多张表

子查询:

一个语句包含另一个语句

where后

from后

子查询也不仅限于2条语句,也可以是多条sql语句

代码语言:javascript复制
-- $日期函数:

-- 获取日期是本年的第几天, 值在1到366之间
SELECT DAYOFYEAR('1998-02-03');

-- 获取日期是本月的第几天, 值在1到31之间
SELECT DAYOFMONTH('1998-02-03');

-- 获取日期是本周的第几天, 值在1到7之间
SELECT DAYOFWEEK('1998-02-03');

-- 获取日期的星期索引
SELECT WEEKDAY('1999-03-16 13:23:00');

-- 获取日期的月份英文名
SELECT MONTHNAME('1998-02-09');

--  获取日期是星期几
SELECT DAYNAME('1987-09-07');

-- 获取日期是本年的哪一季度,取值1到4
SELECT QUARTER('1999-09-03');

-- 将日期时间转换成对应的字符串(大小写)
SELECT DATE_FORMAT(NOW(),'%Y%m%d');
SELECT DATE_FORMAT(NOW(),'%Y%m%d%H%I%S');


-- $字符串函数
-- LOWER(column|str):将字符串参数值转换为全小写字母后返回
SELECT LOWER('ZHANG you JUN');

-- UPPER(column|str):将字符串参数值转换为全大写字母后返回
SELECT UPPER('ZHANG you JUN');


-- CONCAT(column|str1, column|str2,...):将多个字符串参数首尾相连
-- 后返回(如果有任何参数为null,则函数返回null,数字将自动转化为字符串)
SELECT CONCAT('zhang',' you',' jun');


-- CONCAT_WS(separator,str1,str2,...):将多个字符串参数以给定的分隔符separator首尾相连后返回
-- 也就是函数圆括号里的第一个项目用来指定分隔符
-- 如果有任何参数为null,则函数不返回null,而是直接忽略它
SELECT CONCAT_WS(';','zhang','wang','李','赵');

-- SUBSTR(str,pos[,len]):从源字符串str中的指定位置pos开始取一个字串并返回
-- ①len指定子串的长度,如果省略则一直取到字符串的末尾;len为负值表示从源字符串的尾部开始取起
-- ②函数SUBSTR()是函数SUBSTRING()的同义词
SELECT SUBSTRING('hello world',5);
SELECT SUBSTR('hello world',5,3);
SELECT SUBSTR('hello world',-5);

-- LENGTH(str):返回字符串的存储长度
SELECT LENGTH('text'),LENGTH('你好');
-- 注意:编码方式不同字符串的存储长度就不一样(‘你好’:utf8是6,gbk是4)

-- CHAR_LENGTH(str):返回字符串中的字符个数
SELECT CHAR_LENGTH('text'),CHAR_LENGTH('你好');

-- INSTR(str, substr):从源字符串str中返回子串substr第一次出现的位置
SELECT INSTR('foobarbar','bar');

-- LPAD(str, len, padstr):在源字符串的左边填充给定的字符padstr到指定的长度len,返回填充后的字符串
SELECT LPAD('hi',5,'??');

-- RPAD(str, len, padstr):在源字符串的右边填充给定的字符padstr到指定的长度len,返回填充后的字符串
SELECT RPAD('hi',6,'??');

-- TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str):
-- 从源字符串str中去掉两端、前缀或后缀字符remstr并返回;
-- 如果不指定remstr,则去掉str两端的空格;
-- 不指定BOTH、LEADING、TRAILING ,则默认为 BOTH
SELECT TRIM('  bar  ');
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

-- 替换REPLACE(str, from_str, to_str):在源字符串str中查找所有的子串form_str(大小写敏感),
-- 找到后使用替代字符串to_str替换它。返回替换后的字符串
SELECT REPLACE('www.mysql.com','w','CC');

-- REPEAT(str, count):将字符串str重复count次后返回
SELECT REPEAT('MySQL',3);

-- REVERSE(str):将字符串str反转后返回
SELECT REVERSE('abcdef');


-- $数学函数:

-- ABS(X),绝对值函数,返回数字X的绝对值
SELECT ABS(2),ABS(-2.2),ABS(-22);

-- PI(),圆周率函数,返回圆周率
SELECT PI();

-- SQRT(X),平方根函数,返回数字X的平方根
SELECT SQRT(9),SQRT(40.3),SQRT(-3);

-- MOD(X,Y),求余函数,返回X % Y的值
SELECT MOD(92,3),MOD(40,32),MOD(9.9,3);

-- CEIL(X),CEILING(X),向上取整函数,获取比X大的最小整数
SELECT CEIL(3.3),CEILING(-3.3);

-- FLOOR(X),向下取整函数,获取比X小的最大整数
SELECT FLOOR(4.6),FLOOR(-4.6);

-- RAND([X]),随机数函数,在 0 - 1.0 产生一个随机浮点数,X值可选,同一X值产生的随机数是相同的
SELECT RAND(),RAND(),RAND(1),RAND(1),RAND(5);

-- ROUND(X,[Y]),四舍五入函数, 数字X四舍五入,保留Y位小数,Y值可选,不填写取整
SELECT ROUND(10.5),ROUND(3.4),ROUND(3.141592654,2);

-- TRUNCATE(X,Y),截取函数,截取数字X,保留Y位小数
SELECT TRUNCATE(3.141592654,2),TRUNCATE(-3.141592654,2);

-- ...等等

0 人点赞