修改数据库中某列某个字段的值
update
update表名
set列名1=值1,列名2=值2,...,列名n=值n
where条件;
【注意】update语句如果不写where 条件语句,将会把表中所有的行中的值改变
【注意】MySQL5.7中不是别百分号,用小数表示
Delete
deletefrom 表名
where条件;
【注意】delete 语句如果没有where条件,将会把表中所有数据删除
count(*)表示当前表中一共有多少条记录
like
通配符%: 0,1,或更多
通配符_: 单一数字或字符
【注意】浮点数100.00 匹配用?___.__
select* from 表名
where列名 like 'XXXX%';
select* from 表名
where列名 like '_X_X';
limit
限制
select* from 表名 limit n;
其中,n指返回表中前n条记录
select* from 表名 limit m,n;
从第m+1条记录开始,返回n条
【注意】表中第一行的索引是1
【注意】limit语句永远放在sql语言的最后
order by 排序
ASC升序
DESC降序
select列名 from 表名
where条件
orderby 列名 ASC;
【注意】order by语句后面出现的列名,可以不在select语句中
练习题:
把customers中,城市为北京的顾客,按照年纪的升序排序,并且按照工资的降序排列,只返回结果中的第一条记录
select* from customers
whereaddress = 'Beijing'
orderby age ASC, salary DESC
limit1;
选中排列在第N位的数据
思考题:
选出customers表中,工资排在第5位的顾客的信息
select* from customers
orderby salary desc
limit4,1;
随机选择表中数据
select* from 表名
orderby rand()
limitN;
group by分组
常与聚合函数一起用
常用的聚合函数:
count()总数
sum()求和
avg()平均值
min()最小值
max()最大值
select列名1,...,列名n,聚合函数(表达式) from 表名
where条件
groupby 列名1,...,列名n
orderby ...;
【注意】
1.group by语句必须放在where语句之后,order by语句之前
2.group by之后的列,必须出现在select语句之中,或者聚合函数表达式中。
select语句中的列,如果不出现在聚合函数表达式中,则必须出现在group by语句中
练习题:
列出各个城市的平均工资,按照平均工资由小到大排序
selectaddress, avg(salary) from customers
groupby address
orderby avg(salary);
having语句:对group by产生的分组进行筛选
例子:
selectaddress,avg(salary) from customers
groupby address
havingavg(salary) > 4000;
【注意】
1.having 语句通常与group by联合使用,用来过滤由groupby语句返回的记录集合
2.having 语句的存在弥补了where语句不能与聚合函数联合使用的不足
select列名1,...,列名n,聚合函数(表达式) from 表名
where条件
groupby 列名1,...,列名n
having条件1,...,条件n;
练习题:
列出各个城市中,年龄不大于25岁的顾客里面的最高收入,并且该最高收入不得低于3000元,
将这些记录按照最高收入由小到大排列
提示:max(),where,group by,having,order by...
selectaddress,max(salary) from customers
whereage <= 25
groupby address
havingmax(salary) >= 3000
orderby max(salary) asc;
列出非北京的各个城市的平均工资,按照平均工资由小到大排序,并且只列出前两名的城市信息
方法一:
selectaddress,avg(salary) from customers
wherenot (address = 'beijing')
groupby address
orderby avg(salary) ASC
limit2;
方法二:
selectaddress,avg(salary) from customers
groupby address
havingaddress != 'beijing'
orderby avg(salary) ASC
limit2;
distinct 去除重复值,提取唯一的记录,与select语句一起用
selectdistinct 列名1 from 表名
where条件;
列出customers表中,分别列出不同城市的顾客的人数
selectcount(distinct address) from customers;
selectaddress,count(address) from customers group by address;
***多表查询
Alias:给表或者列临时起个别名
select列名 from 表名 as 新的表名;
select列名 as 新的列名 from 表名;
joins 连接,作用是:多表查询
利用两个表中共同含有的列的相同值来连接
select列名 from 第一个表,第二个表
where第一个表.列名 = 第二个表.列名;
例子:
selectid, name, salary, o_name, amount
fromcustomers,orders
wherecustomers.id = orders.c_id;
练习题:
打印出顾客消费额度amount超过其工资salary的人员名单,工资,消费额度
selectname, salary, amount
fromcustomers,orders
wherecustomers.id = orders.c_id and amount > salary;
union: 综合多个select语句,且返回不重复的行
select列名1,..,列名n from 表1
where条件
union
select列名1,..,列名n from 表2
where条件;
例子:
选中customers表中,年龄小于25岁和大于27岁的人的姓名和年龄
方法1:or
selectname, age from customers
whereage < 25 or age > 27;
方法2: union
selectname, age from customers
whereage < 25
union
selectname, age from customers
whereage > 27;
【注意】
1.每个select语句中必须选中相同数目的列
2.列的数据类型要一致
3.列的顺序要一致