MySQL基本语句(基础篇)
何兮笔录
1、基础查询
select查询列表from表名;
select100;select'jion';-- 查询常量值
select100*100;-- 查询表达式
select distinct name from table_name;-- 去重
select version();-- 查看版本号
select database();-- 查看当前数据库名
select user();-- 查看当前⽤户
select connection_id();-- 查看当前⽤户id-306
select found_rows();-- 返回上次查询的检索⾏数
show variables LIKE'%char%';-- 查看字符列表
show databases;-- 查看所有的数据库
show tables;-- 查看所有的表
desc表名;-- 查看表结构
show table status;-- 查看所有的表信息(包括视图)
use db_name;-- 使⽤这个数据库
create database db_name;-- 创建⼀个数据库
drop database db_name;-- 删除⼀个数据库
2、条件查询
/* 语法:select 查询列表
from 表名
where 筛选条件; */
select*from table_name where _value<>12000;-- 条件运算符:> < != <> >= <=
select*from table_name where _value>=10000and _value<20000;-- 逻辑运算符:&& || ! and or not
# is null/is not null:可以判断NULL值,=或<>不能⽤于判断NULL值
# 安全等于:<=> 既可以判断NULL值,⼜可以判断普通值
# like:(1)⼀般和通配符搭配:_ 任意单个字符、% 任意多个字符,包含0个字符
select*from table_name where name like'%a%';-- 包含字符a的name字段
select*from employees where name like'__e_a%';-- 第三个为字符e,第五个为字符a
select*from table_name where name like'_\_%';-- 转义字符
select*from table_name where name like'_$_%'escape'$';-- 转义字符
select*from table_name where _value between10000and20000;-- 包含边界值
select*from table_name where _value in('IT_PROT','AD_VP','AD_PRES');-- 判断某字段的值是否属于IN列表中的某⼀项3、排序查询
/*语法:select 查询列表 from 表名 where【筛选列表】 order by 排序列表;
dese 降序
asc 升序(默认)
order by ⼦句中可以⽀持单个字段、多个字段、函数、表达式、别名,⼀般放在查询语句的最后⾯,但LIMIT⼦句除外 */ select*from table_name order by _value asc;
select*from table_name order by _value1 asc, _value2 desc;-- 按多个字段排序
4、分组查询
jquery动画小案例/*语法:SELECT 分组函数,列(要求出现在group by的后⾯)
FROM 表
【where 筛选条件】
group by 分组的列表
【order by ⼦句】
查询列表必须特殊,要求是分组函数group by后出现的字段 */
select count(*), id from table_name group by id;
5、连接查询
/* 语法:select 查询列表
from 表1 别名【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 分组后的筛选条件】
【order by 排序列表】
分类:
内连接:inner
外连接:左外:left 【outer】、右外:right 【outer】、全外:full 【outer】
交叉连接:cross */
select*from m inner join n on m.id = n.id;-- 内联接
select*from m left join n on m.id = n.id;-- 左外联接
select*from m right join n on m.id = n.id;-- 右外联接
# MySQL不⽀持全外连接,但可以通过左外连接+ union+右外连接实现
select*from m full join n on m.id = n.id;-- 全外联接
# 类似全连接full join的联接⽤法
select id,name from m
union
select id,name from n;
select*from m cross join n;-- 交叉联接,笛卡尔乘积SQL99标准
select*from m, n;-- SQL92标准
6、⼦查询
/* ⼦查询
含义:出现在其他语句中的Select语句,称为⼦查询或内查询
外部的查询语句,称为外查询或主查询
分类:按⼦查询出现的位置:
Select后⾯:仅仅⽀持标量⼦查询、
From后⾯:⽀持表⼦查询、
Where后⾯或having后⾯:标量⼦查询、列⼦查询、⾏⼦查询、
exists后⾯(相关⼦查询):表⼦查询
按结果集的⾏列数不同:
标量⼦查询(结果集只有⼀⾏⼀列)
列⼦查询(结果集只有⼀⾏多列)
⾏⼦查询(结果集只有⼀⾏多列)
表⼦查询(结果集⼀般为多⾏多列) */
-- 1、标量⼦查询
select*from employees where salary>(select salary from employees where last_name='Abel'); -- 2、select后⾯
select n.*,(select count(*)from m where m.id=n.id)from n;
-- 3、from后⾯
select*from(select*from table_name1 group by _value1)as m inner join n on m.id=n.id;
# 4、exists后⾯(相关⼦查询)
/* 语法:exists(完整的查询语句)
结果:1或0 */
select*from m where exists(select*from n where m.id=n.id);
7、分页查询
/* 分页查询
应⽤场景:当要显⽰的数据,⼀页显⽰不全,需要分页提交SQL请求
语法: select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by排序的字段】
limit 【offset,】size;
offset:要显⽰条⽬的起始索引(0开始)
size:要显⽰的条⽬个数
特点:1、limit语句放在查询语句的最后
2、公式
要显⽰的页数page,每页的条⽬数size
select 查询列表
from 表
limit (page-1)*size,size; */
Select*From employees limit0,5;
Select*From employees limit5;
Select*From employees limit10,15;
Select*From employees Where commission_pct IS NOT NULL Order By salary desc Limit10,15;
7、联合查询
嵌入式培训课程大纲/
* union 联合合并:将多条查询语句的结果合并成⼀个结果
语法:查询语句1
union
查询语句2
...
应⽤场景:要查询的结果来⾃多个表,且多个表没有直接连接关系,但查询的信息⼀致时
mysql语句分类特点:1、要求多条查询语句的列数是⼀致的
2、要求多条查询语句的查询的每⼀列的类型和顺序最好⼀致
3、unino 默认去重,union all可以包含重复项 */
Select*From employees Where email Like'%a%'or department_id>90;
Select*From employees Where email Like'%a%'
Union
Select*From employees Where department_id>90;
8、常⽤函数
(1)字符函数
select concat('a','p','p','le');-- 连接字符串 apple
select concat_ws(',','a','p','p','le');-- 连接⽤','分割字符串 a,p,p,le
select insert('chinese',3,2,'IN');-- 从3位置开始的2个字符替换为'IN'-chINese
select instr('杨不悔爱上了殷六侠','殷六侠');-- 返回第⼀次出现的起始索引
select lpad('殷素素',10,'*');-- ⽤指定字符左填充指定长度
select rpad('殷素素',10,'ab');-- ⽤指定字符右填充指定长度
select left('chinese',4);-- 返回字符串'chinese'左边的4个字符-chin
select right('chinese',3);-- 返回字符串'chinese'右边的3个字符-ese
SELECT substr('李莫愁爱上了陆展元',7);-- 截取从指定索引处后⾯的所有字符
SELECT substr('李莫愁爱上了陆展元',1,3);-- 截取从指定索引处指定字符长度的所有字符SELECT substring('chinese',3);-- 返回第三个字符之后的⼦字符串-inese
SELECT substring('chinese',-3);-- 返回倒数第三个字符之后的⼦字符串-ese
SELECT substring('chinese',3,2);-- 返回字符串'chinese'第三个字符之后的两个字符-in SELECT trim(' chinese ');-- 切割字符串' chinese '两边的空字符-'chinese'
SELECT ltrim(' chinese ');-- 切割字符串' chinese '两边的空字符-'chinese '
SELECT rtrim(' chinese ');-- 切割字符串' chinese '两边的空字符-' chinese'
SELECT replace('张⽆忌爱上了周芷若','周芷若','赵敏');-- 替换
SELECT reverse('chinese');# 反向排序-'esenihc'
SELECT repeat('boy',3);# 重复字符'boy'三次-'boyboyboy'
SELECT length('chinese');# 返回字符串的长度-7
SELECT upper('chINese'), lower('chINese');# ⼤写⼩写 CHINESE chinese
SELECT ucase('chINese'),lcase('chINese');# ⼤写⼩写 CHINESE chinese
SELECT position('i'IN'chinese');# 返回'i'在'chinese'的第⼀个位置-3
SELECT position('e'IN'chinese');# 返回'i'在'chinese'的第⼀个位置-5
SELECT strcmp('abc','abd');# ⽐较字符串,第⼀个参数⼩于第⼆个返回负数- -1
SELECT strcmp('abc','abb');# ⽐较字符串,第⼀个参数⼤于第⼆个返回正数- 1
(2)数学函数
SELECT abs(-5);# 绝对值
SELECT bin(15), oct(15), hex(15);# ⼆进制,⼋进制,⼗六进制
SELECT pi();# 圆周率3.141593
SELECT ceil(5.5);# 向上取整
SELECT floor(5.5);# 向下取整
SELECT greatest(3,1,4,1,5,9,2,6);# 返回集合中最⼤的值9
SELECT least(3,1,4,1,5,9,2,6);# 返回集合中最⼩的值1
SELECT mod(5,3);# 取余 mod(a,b) == a-a/b*b
SELECT rand();# 返回 0 到 1 内的随机值,每次不⼀样
SELECT rand(5);# 提供⼀个参数(种⼦)使RAND()随机数⽣成器⽣成⼀个指定的值。SELECT round(1415.1415);# 四舍五⼊1415
SELECT round(1415.1415,3);# 四舍五⼊三位数1415.142
SELECT round(1415.1415,-1);# 四舍五⼊整数位数1420
SELECT truncate(1415.1415,3);# 截断为3位⼩数1415.141
SELECT truncate(1415.1415,-1);# 截断为-1位⼩数1410
SELECT sign(-5);# 符号函数参数>0 返回1;参数<0 返回-1
SELECT sqrt(9);# 平⽅根3
(3)⽇期函数
SELECT NOW();-- 返回当前系统⽇期+时间
SELECT CURDATE();-- 返回当前系统⽇期,不包含时间
SELECT CURTIME();-- 返回当前系统时间,不包含⽇期
SELECT YEAR(NOW())年;-- 可以获取指定的部分,年、⽉、⽇、⼩时、分钟、秒
SELECT YEAR('1998-1-1')年;
SELECT str_to_date('07-11-1997','%m-%d-%Y');-- 将⽇期格式的字符串转换成指定格式的⽇期SELECT date_format('1997/11/07','%Y年-%m⽉-%d⽇');-- 将⽇期转换成字符串
SELECT quarter(current_date);
SELECT monthname(current_date), dayname(current_date);-- January Saturday SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date);
(4)分组函数
select count(id)as total from n;-- 总数linux上机实验报告总结
select sum(age)as all_age from n;-- 总和
select avg(age)as all_age from n;-- 平均值
select max(age)as all_age from n;-- 最⼤值
select min(age)as all_age from n;-- 最⼩值
(5)流程控制函数
SELECT IF(10>5,'⼤','⼩');
SELECT ifnull(NULL,'t'), ifnull(2,'t');# t 2
SELECT isnull(1), isnull(1/0);# 0 1 是null返回1,不是null返回0
SELECT nullif('a','a'),nullif('a','b');# null a 参数相同或成⽴返回null,不同或不成⽴则返回第⼀个参数# case函数的使⽤:
excel分类汇总公式函数/*
语法1(switch case 的效果):
case 要判断的字段或表达式
when 常量1 then 要显⽰的值1或语句1;
when 常量2 then 要显⽰的值2或语句2;
...
else 要显⽰的值n或语句n;
end
语法2(if else嵌套的效果)的效果:
case
when 条件1 then 要显⽰的值1或语句1;
when 条件2 then 要显⽰的值2或语句2;
...
else 要显⽰的值n或语句n;
end
*/
SELECT salary, department_id,
CASE department_id
WHEN30THEN salary*1.1
WHEN40THEN salary*1.2
WHEN50THEN salary*1.3
ELSE salary
mysql创建表外键end AS新⼯资
FROM employees;
SELECT salary,
CASE
WHEN salary>20000THEN'A'
WHEN salary>15000THEN'B'
WHEN salary>10000THEN'C'
ELSE'D'
end AS⼯资级别
FROM employees;
7、表
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论