常用mysql语句

1.检索数据:select  其中一列或者几列

2.排序检索数据:order by

3.数据过滤:where(where可以和and,or,in连用)

4.利用通配符进行数据过滤:like

(1)%表示任意字符出现任意次数

找出以jet开头的产品:

where  product_name   like  'jet%'

(2)_下划线只匹配单个字符

5.汇总数据:聚合函数

select avg(price)  from  products     得到:16.13357    

select count(customer_email)    from  customers   

select  max(price)  from  products

select  min(price)  from  products

select  sum(price)  from  products

6.数据分组  having和group by

将数据分成几个组,每个组分别计算

select  sex ,max(age)

from student

group by sex

按照性别分组,一行就是一组(分成男生组和女生组两组)

 

下面的例子就是按照job_id进行分组,一个job_id就是一组,然后选出每个组的 max(salary),job_id两列

select  max(salary),job_id
from  employee
group by  job_id;

 having非常类似于where,where过滤行(保留哪些行,不要哪些行),having过滤分组(保留哪些分组,不要哪些分组),先决定留下哪些分组,再决定留下每个分组里面的哪些行

要求分组种行数必须大于2,行数不大于2的分组不进行计算

select  max(salary),job_id
from  employee
group by  job_id

having  count(*) >=2

select   .......  from........

where........

group by .......

having .......

7.联表查询

等值连接:也称内部连接  inner join 

其他三种连接:自连接(自己连接自己),自然连接,外部连接(又分为左外连接和右外连接)

语法:

等值连接(内部连接):select......  from    A    inner join  B  on    A.id=B.id

自连接: 

外部连接:select.......   from     A left outer  join B  on  A.id=B.id(把这当作一张新的表)

首先当然是建表语句:

CREATE TABLE user
(
    id INT(6) ,
	username VARCHAR(60),
	realname VARCHAR(60),
	PASSWORD VARCHAR(50),
	sex VARCHAR(4),
	STATUS VARCHAR(4),
	regsterTime TIMESTAMP
);

 字段名+这个字段的类型就可以定义一个字段

1.insert 插入语句:

插入一列:

插入多列:

2.upgrade 修改语句

修改一列:

修改多列:

 3.删除一行

 想把整张表删除:trancate  表名

4.最重要的是查询语句:

(1)查询出整张表: select * from  表名

(2)查询出一张表的某几列:

(3)查询结果起别名可以给查询结果的列起一个别名(也可以给表起别名):

 (4)去重:select  distinct  `StudentNo`  from   result

没加distinct之前可能是1001,1001,1002,1002,1002,1003,1003,1003

加了distinct之后是:1001,1002,1003

   (5)模糊查询:like  查找姓刘的同学

 

like结合% 和_,其中%代表0到任意个字符,_代表一个字符

 (6)in

一条比较全面的sql语句如下:

select *
from People
where  age>=18 && sex!='male'
order by  birth_date  asc|desc    

分组查询:其实就是分组,将表中的数据分成若干组

 查询每个工种的最高工资:每个工种就是一组

select  max(salary),job_id
from  employee
group by  job_id;

 where,having和group by连用

 

 

 

 group by的结果最后升序或者降序排列(与order by)连用

 

 经典案例:查询每个部门的平均工资 

分页查询:

select * 
from  employee
limit  0,5

limit后面跟两个参数offset  size

offset表示起始索引是多少,size表示要显示的行数

比如 limit  0,5,显示的就是0,1,2,3,4这五条记录

 如果是limit 1,5,那显示的就是1,2,3,4,5这5条记录

如果想要查询第11-25这15条数据,那就是limit  10,15

以上都是单表查询,下面展示联立两个表格的数据进行查询,即联表查询:

等值连接:

select  beauty.id,beauty.name,boys.boyName
from  beauty,boys
where  beauty.boyfriend_id=boys.id

 自连接:

就是同一张表给他起两个别名,一个叫a,一个叫b,然后这两个表做等值连接

查询哪些学生的01这门课的成绩比02这门课成绩高

只用到一张表,成绩表Score,这张表里面有三个字段,s_id,c_id,s_score

 考察自连接:

都是score分数表,一张给它起别名叫表a,专门用来查01这门课程的分数,另一张给它起别名叫表b,专门用来查02这门课程的分

select *
from  score a
where  a.c_id='01'
 
 
select  *
from  score b
where  b.c_id='02'


 现在连接两张表:

SELECT  a.s_id,a.s_score course01,b.s_score course02
FROM   score a,score  b
WHERE  a.c_id='01' AND  b.c_id='02'  AND  a.s_id=b.s_id  AND a.s_score>b.s_score 

(1)inner join  合并两个表格的数据(求交集)

A有四行:(1,2,3,4),表B有四行:(3,4,5,6)

当表A使用内部联接与表B连接时,我们得到结果集(3,4),它是表A和表B的交集。

具体实例如下:

创建下面两个表,customers表orders表

 输入以下sql语句:

select customers.id,customers.name,orders.amount,orders.date
from customers inner join orders
on customers.id=orders.id

 此时你就站在customers的角度,对于customers表中的每一行的id(比如说是x),都会去另一张表order表中查询所有行,看有没有哪一行的id和x是相等的,如果有id相等的行,就将customers里这行和order里的这一行连接起来

具体来说:对于customer表中id=2的这一行,遍历order表中每一行,发现有一行(也就是第三行)id也等于2,于是按照sql语句中的描述,将customer表中的id,name两列和order表中的amount和date两列进行拼接,得到:

 而对于customer表中id=3的这一行,遍历order表中每一行,发现有两行(也就是第一行,第二行)id也等于3,于是按照sql语句中的描述,将customer表中的id,name两列和order表中的amount和date两列进行拼接,得到:

最终查询结果:

(2) left join

设有两个表AB。表A有四行:1,2,3,4。表B还有四行:3,4,5,6

当将表A与表B连接时,表A中的所有行(左表)都包含在结果集中,而不管无论表B中是否存在匹配的行。

A left join B:保留左边的表格所有选取的数据,然后再把右边表格符合条件的合并过来

student表学生表

 grade表成绩表

 执行sql语句:

SELECT student.student_id,student.name,student.age,grade.score,grade.course_name
FROM  student LEFT JOIN grade
ON student.student_id=grade.student_id

 得到结果:

 其实就是inner join的基础上,加上student表中没有在grade表中

这是inner  join的结果:

 在这个结果的基础上,加上student表中有的,grade表中没有的行,也就是student表中student_id=2的行

(3)Union 求并集


(4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值