今天整理了一些简单的sql语句,觉得非常的实用。
语法:select 查询列表 from 表名;
特点:可以查询表中的字段、常量值、表达式、函数
#1、查询emp表中的单个last_name字段:select last_name form emp
#2、查询emp表中的多个字段: select last_name,salary,email from emp
#3、查询emp表中的所有的字段:select * from emp;
#4、查询常量值 :select 100;
#5、可以用AS来起别名:select last_name AS 姓,first_name AS 名 from emp;
#6、可以直接空格,来起别名:select last_name 姓,first_name 名 from emp;
#7、起别名--out_put是sql敏感词,所以后面加上单引号: select salary AS ‘out put’ from emp;
#8、去重distinct: 查询员工表涉及到的所有的部门编号:select distinct dep_id from emp;
#9、concat的作用:查询员工名和姓连接成一个字段,并显示为姓名: select concat('a','b','c','d') AS 姓名
#10、条件查询 select 查询列表 from 表名 where 筛选条件 :select last_name,depart_id from emp depart_id !=90;
#11、按逻辑表达式筛选 :select last_name,salary,commission_part from emp salary>=10000 and salary<=20000;
#12、模糊查询 like / between / and / in / is null /is not null
#13、查询员工名中包含的字符a的员工信息 :
select * from emp where last_name like '%a%';
#14、查询员工名中第二个字符为_的员工名:
select last_name from emp where last_name like '_\_%' escape "$";
#15、查询员工的工种编号是 IT_PROG、AD_VP:
select last_name,job_id from emp where job_id in(IT_PROG,AD_VP);
#16、安全等于 <=>,可以判断null值,也可以判断普通的数值
#17、concat:拼接字符 ifnull函数:判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值:
select ifnull(commission_pct,0) from emp;
isnull函数:判断某字段或表达式是否为null,如果是,则返回1.
#18、排序查询列表:select 查询列表 from 表 where 筛选信息 order by 排序列表 【asc|desc】
#19、按年薪的高低显示员工的信息和年薪:
select * salary*12*(1+(commision_pct,0)) 年薪 from emp order by salary*12*(1+IFNULL(commision_pct,0)) order by 年薪 desc(降序);
#20、常见函数: 1、单行函数:如concat、length、ifnull等
2、分组函数:功能--做统计使用,又称为聚合函数
#21、将John变大写、变小写:(upper、lower )select upper(‘John’)
#22、将姓变大写,名变小写 :
select concat(upper(last_name),lower(first_name)) 姓名 from emp;
#23、(substr、substring)索引从7开始,运行sql语句后得出陆展元:select substr('李莫愁爱上了陆展元',7) out_put;
#24、截取从指定索引处指定字符长度的字符,索引从1开始,运行sql语句后得出李莫愁:select substr('李莫愁爱上了陆展元',1,3) out_put;
#25、日期函数 返回当前系统日期+时间:select now();
#返回当前系统日期,不包含时间: select curdate();
#返回当前时间,不包含日期:select curtime();
#获取指定的部分,年月日、小时、分钟、秒:select year(now())年; select year(1992-1-1);
#26、datediff 相差的天数,最大、最小入职的相差天数:
select datediff(max(hiredate) min(hiredate)) diffrence from emp;
#27、从emp中查询所有的个数:select count(*) from emp;
#28、分组查询 select 分组函数,列(要求出现在group by的后面) from 表 【where 筛选】group by 分组的列表 【order by 子句】
#引入:查询每个部门的平均工资:select avg(salary) from emp;
#replace替换
#truncate 截断:后面不管是啥,都不要了
#round 四舍五入
#mod 取余
#29、insert 第一种形式:INSERT INTO table_name VALUES (value1,value2,value3,...);
#29、第二种形式:INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
#30、update语法:UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;
#31、delete语法:delete from table_name where some_column=some_value;
#32、Having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。
也有这样区别两者的:where过滤行,having过滤组
使用顺序:where、having、group by、order by、limit
SELECT * FROM t_order WHERE STATUS = 6 GROUP BY user_id HAVING COUNT(total_amount) > 2 ORDER BY create_time LIMIT 0,10
SQL实例:
一、显示每个地区的总人口数和总面积. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中 的不同字段(一或多条记录)作运算。
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000