mysql必知必会(三)

创建计算字段
有时会拼接字段,求数据的总数,起别名等。
使用concat()拼接字段:

SELECT CONCAT(name,'(',tel,')') FROM user ORDER BY id DEESC;

使用别名(AS)

SELECT CONCAT(name,'(',tel,')') AS info FROM user ORDER BY id DEESC;

算数操作符

1.加 +
2. 减 -
3. 乘 *
4. 除 /

select id,prod_price,quantity,prod_price*quantity as expanded_price from product ;

文本处理函数
使用TRIM()去除两边的空格,使用LTRIM()去除左边的空格,RTRIM()去除右边的空格。

SELECT CONCAT(name,'(',TRIM(tel),')')  AS info FROM user ORDER BY id DEESC;

left()返回左边指定长度的字符,right()返回右边指定长度的字符。

select name,left(name,2) from user;

length()返回一个串的长度。

select length(name) from user;

lower()将字符串小写,upper()将字符串大写。

select name,upper(name) from user;

日期和时间处理函数
一般时间的格式为:yyyy-MM-dd HH:mm:ss

curtime() 返回当前时间
curdate() 返回当前日期
now() 返回当前日期和时间

select curtime();
select curdate();
select now();

date() 返回日期时间的日期部分
time() 返回一个日期时间的时间部分

select date('2015-07-09 13:34:20');

datediff() 两个时间差

select datediff('2015-05-09','2015-07-09');

year() 返回一个日期的年数
month() 返回一个日期的月数
day() 返回一个日期的天数部分
hour() 返回一个时间的小时部分
minute() 返回一个时间的分钟部分
second() 返回一个时间的秒部分

select year('2015-07-09 13:34:20');

dayofweek() 返回一个日期对应的星期数
adddate() 添加一个日期
addtime() 添加一个时间

select adddate('2015-07-09 13:34:20',20);

常用的数值处理函数

  • abs() 返回一个数的绝对值
  • exp() 返回一个数指数值
  • rand() 返回一个随机数
  • sqrt() 返回一个数的平方根
    聚合函数
  • avg() 返回某列的平均值
  • count() 返回某列的行数
  • max() 返回某列的最大值
  • min() 返回某列的最小值
  • sum() 返回某列之和

注意:avg()、max()、 min()、sum() 忽略列值为null的行。
使用count(*)对表中行的进行统计,不管列中包含的是空值(null)还是非空值。
count(column)对特定列中具有值的行进行统计,忽略null值。
分组统计
分组是用group by实现的

select prod_id,count(*) as num_prod from product group by prod_id;

having 过滤分组,用在group by 之后。where 是过滤行,在group by 之前。

select prod_id,count(*) as num_prod from product where prod_price > 10 group by prod_id having count(*) >2;

查询语句的顺序

  1. select
  2. from
  3. where
  4. group by
  5. having
  6. order by
  7. limit
    子查询、联接查询、组合查询
    子查询一般使用in操作符。
SELECT cust_name FROM customers WHERE cust_id 
IN (SELECT cust_id FROM orders WHERE order_num 
IN(SELECT order_num FROM orderitems WHERE prod_id = "TNT2")
);

SELECT
cust_id,cust_name,
(SELECT COUNT(*) FROM orders WHERE orders.cust_id  = customers.cust_id) AS order_num
FROM
customers; 

等值联接

SELECT ts.id AS 'stuid',stu_name,tc.id  AS 'class_id',class_name
FROM t_student  AS ts,t_class AS tc
WHERE  ts.class_id = tc.id 

内联接(inner join on)

SELECT  ts.id AS ' stuid',stu_name,tc.id  AS 'class_id',class_name
FROM t_student AS ts
INNER JOIN t_class AS tc
ON ts.class_id = tc.id

外联接(left join on/right join on)

SELECT ts.id AS ' stuid',stu_name,tc.id AS 'class_id',class_name
FROM t_student AS ts
LEFT JOIN  t_class AS tc
ON ts.class_id  = tc.id

left join on左外联接将显示左表的所有记录。
right join on右外联接将会显示右表的所有记录。

组合查询(union)
• union必须由两条或两条以上的select语句组成,语句之间使用union分割
• union的每个查询必须包含相同的列,表达式或聚合函数
• 列的数据类型必须兼容:类型不必完全相同,但是必须是相互可以转换的
• union查询会自动去除重复的行,如果不需要此特性,可以使用union all
• 对union结果进行排序,order by语句必须在最后一条select语句之后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值