前言
:one: :mysql环境准备
上一章,我们准备环境:安装数据库+创建数据库+创建用户+授权。
这一章:参考《sql必知必会》chapter4~7
简单的单表查询:导入表+表查询
mysql-client中没有设置的时候,无法table自动补齐。敲起来,太慢。
安装一个mycli
,table补齐,很好用。mycli 官网
[toc]
总结与摘要
首先要有表,表中有内容;书中已经给了脚本,我们采用脚本导入。
表的常规操作:增删改查。
我们这里,仅仅整理下简单的单表查询。
这里不列出具体的语法格式,具体格式,用help select
查看。
复制 selet[select 选项] 字段列表[字段别名] from 数据源
[where条件字句]
[limit 字句]
[order by 字句]
导入表
关于表结构与脚本下载,见书上的附录B。或者参看:mysql必知必会脚本
脚本下载:http://www.forta.com/books/0672325675/
参考:用source 命令导入mysql数据库
复制 # 创建样例表导入脚本
$ mysql -u root - p -D crashcourse < d create.sql
# 或者
mysql> source 脚本的绝对路径
表查询
限定:不重复distinct、限制输出行数limit
一条查询语句暂时可以划分成上面四个部分;我们简单举例说道说道。
查询列
查询单列,多列,所有列。
复制 mysql> select prod_id, vend_id, prod_name, prod_price from products;
限定表名。
现在查询的是单表。后面多表,子查询的时候,限定表名是很好的。(咋个好法?)
复制 mysel> ELECT products.prod_name FROM products;
限定
参考:MySQL的limit使用及解决超大分页问题
复制 # 不重复输出;如果指定多列,多列都不系统,才能检索出来
SELECT DISTINCT vend_id from products;
# 输出指定行数;offset和limit,前者表示偏移量,后者表示取前limit条数据
# 从第四行(下表从零开始)开始,输出三行。
mysql> select * from products
limit 3 offset 4
过滤数据
where单一条件:相等、不相等、大于、小于、值的范围以及NULL值
参考文章:mysql中in和exists性能对比及原理
复制 # SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符--->没事多加括号就好
# 列出价格为10美元(含)以上且由1002或1003制造的所有产品。
mysql> SELECT * FROM products WHERE prod_price>=10 AND (vend_id=1001 OR vend_id=1003)
# 在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。
# IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
mysql> SELECT * FROM products WHERE prod_price>=10 AND vend_id IN (1001,1003)
输出样式
检索出的数据并不是以纯粹的随机顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义
参考文章:mysql select 格式化输出
复制 # ORDER BY默认是升序
mysql> SELECT * FROM products
WHERE vend_id IN (1001,1003)
order by prod_price[DESC|ASC],prod_name [DESC|ASC]
参考文章
mycli 官网
用source 命令导入mysql数据库
MySQL的limit使用及解决超大分页问题
mysql中in和exists性能对比及原理
mysql select 格式化输出
解决MySQl查询不区分大小写