关闭

mysql必知必会(三)

标签: mysqlgroup-byhaving
252人阅读 评论(0) 收藏 举报
分类:

创建计算字段
有时会拼接字段,求数据的总数,起别名等。
使用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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:84613次
    • 积分:1492
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:19篇
    • 译文:0篇
    • 评论:5条
    最新评论