2. 简单的表查询

前言

:one: :mysql环境准备

上一章,我们准备环境:安装数据库+创建数据库+创建用户+授权。

这一章:参考《sql必知必会》chapter4~7

简单的单表查询:导入表+表查询

mysql-client中没有设置的时候,无法table自动补齐。敲起来,太慢。

安装一个mycli ,table补齐,很好用。mycli 官网

sudo apt install 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

  • 过滤数据:where

  • 输出样式:按照顺序输出order、按照格式输出

一条查询语句暂时可以划分成上面四个部分;我们简单举例说道说道。

查询列

查询单列,多列,所有列。

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值

  • where多个条件:and、or

  • where子查询:in、not、exists

参考文章: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查询不区分大小写

最后更新于

这有帮助吗?