Mysql极简笔记(4)---数据查询操作

一、SELECT查询语句结构

语句名解释
SELECT 列名必选项(顺序1):要显示的列
FROM 表名必选项(顺序2):选取表
[WHERE 语句]可选项(顺序3):行级过滤——高频
[GROUP BY语句]可选项(顺序4):逻辑分组
[ORDER 语句]可选项(顺序5):排序语句——高频
[LIMIT 语句]可选项(顺序6):明确筛选边界

二、 主语句用法

1、常规用法

  1. 显示customers表中cust_id和cust_name 的全部数据
    SELECT cust_id,cust_name FROM customers;

  2. 显示customers中全部列,常用此语句会拖慢数据库效率
    SELECT * FROM customers;

  3. 显示customers中cust_address全部数据。DISTINCT:相同的值仅显示一次
    SELECT DISTINCT cust_address FROM customers;

2、别名AS语句及函数调用

  1. 拼接字段
    SELECT Concat(RTrim(ven_name),'(',Upper(vend_address),')') AS vend_title FROM vendor;

    RTrim()去掉串右边的空格,Concat()连接括号内的字符串,Upper()大写,Left()串左边的字符,Length()串长度
    显示结果为表头vend_title,值类似walmart(SHANGHAI)
    AS后为别名:新表头

  2. 聚合函数(忽略NULL)
    SELECT Count(*) AS num_vend FROM vendor;
    显示总共有多少行
    SELECT AVG(prod_price) AS avg_price FROM products;
    显示列的平均值,表头为avg_price,类似的有MAX(),MIN(),SUM()

三、行过滤语句where

1、 常规用法

单语句写法:

SELECT * FROM customers WHERE prod_id=14;

复合写法:

SELECT pro_id,vend_id,prod_name,prod_price,prod_desc FROM products
WHERE (pro_id NOT IN (12,13,14) AND prod_name !='chuck') OR (prod_price >=20 AND prod_desc IS NOT NULL)
  • IN和NOT语句:pro_id NOT IN (12,13,14) 表示pro_id列中,值不是12,13,14这三个的其他行
  • 操作符语句:prod_name !='chuck’表示prod_name 值不是字符串chuck的其他行,还有四个基本运算符=,>,<,!,一个特殊的运算符BETWEEN a AND b
  • NULL语句:NULL表示没有填,不是空格,空字符串或者0
  • 组合操作符:AND 且:两个条件都要匹配,OR 或:两个条件匹配一个即可

2、全字符匹配like语句

SELECT * FROM customers WHERE prod_name LIKE '_uck%’;

  • 通配符:%:相当于word中的*,_:相当于word中的?
  • 全字符匹配:含通配符必须在内容和字符个数上与数据匹配
  • 筛选默认不区分大小写

3、正则表达式REGEXP语句

SELECT * FROM customers WHERE prod_name REGEXP 'huck’;

  • 局部匹配,只要行中出现huck就显示
  • 筛选默认不区分大小写,字符串前加关键句BINARY,则区分大小写
  • 字符串中可使用正则表达式(部分符号)
  • 特殊字符用\\\特殊字符查找

正则表达式部分:

范例解释范例解释
.huck等同word里?通配符^chuchu出现的数据开头处
chucks*chuck、chucks、chuckss…ck$ck出现在数据结尾处
c(hu|ho)ckchuck或chock[0-2]uk0uk或1uk或2uk
chucks+chucks,chuckss…chucks{3}chucksss
chucks{2,4}chuckss、chucksss、chuckssss[^a-cd]uk非auk或buk或cuk或duk

4、日期函数操作

SELECT cust_id FROM orders WHERE Date(order_date) BETWEEN '2001-06-12' AND '2005-06-15';

范例表:

范例解释范例解释
Date()输出日期部分Time()输出时间部分
Now()输出当前日期加时间DayOfWeek()输出星期部分
CurDate()返回当前日期部分CurTime()返回当前时间部分
Year()返回年部分(Month,Day,Hour等同

注:时间列的数据类型为DATE

四、分组语句group by

SELECT order_num,SUM(quantity*item_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >=50;
  • 结果:显示订单号order_num和相同订单号的总价ordertotal两列(group by 和having中不可用别名)
  • 步骤:以订单号为集合名,将表分成一个个子集,后面的函数SUM()针对的是各个子集做操作,where过滤行,having过滤分组
  • 规定:
    1. group by 可以包含多列,表示可以对子集再分子集
    2. NULL为单独一组,可用函数count(),avg(),sum(),
    3. 合计: GROUP BY order_num WITH ROLLUP会增加合计一行
    4. 除函数外,SELECT列出的每一列必须在GROUP子句中给出

五、 排序语句order

SELECT * FROM customers
ORDER BY  prod_id DESC,prod_name;
  • 先按prod_id 降序排序,如果prod_id 相同,按prod_name排序
  • DESC 为降序排列,与limit子句组合可筛选出极值行

六、 筛选边界语句limit

LIMIT 5,3

  • 从第6行开始,向后3行,即6、7、8行,因为第一行是从0开始编号

LIMIT 3

  • 等同于LIMIT 0,3,即显示前三行

上一篇:Mysql极简笔记(3)—数据增删改操作
下一篇:Mysql极简笔记(5)—复合语句、联结及视图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值