《MySQL必知必会》[01] 基本查询

1、写在前面的话
2、MySQL基本操作
- 命令输入在 mysql> 之后;
- 命令用;或 \g 结束,仅按Enter不执行命令;
- 输入 help 获得帮助;
- 输入 quit 或 exit 退出命令行实用程序
| 操作 | 命令 |
| 进入MySQL | 安装目录的bin下打开命令行,输入mysql -u {yourAccountName} -p |
| 显示现有数据库 | show databases; |
| 选择数据库 | use {databaseName}; |
| 显示已选数据库的表 | show tables; |
| 显示列(字段) | show columns from {tableName}; 或 describe {tableName}; |
| 显示授权用户的安全权限 | show grants; |
3、基本查询 SELECT
| 操作 | 语法 |
| 查询单列 | SELECT {columnName} FROM {tableName}; |
| 查询多列 | SELECT {columnName1, columnName2} FROM {tableName}; |
| 查询所有列 | SELECT * FROM {tableName}; |
- AS
- 放在字段名后或表名后,表示别名
- e.g. SELECT {newTableName}.{columnName} AS {newColumnName} FROM {tableName} as {newTableName};
- e.g. SELECT b.author as 'zuozhe' FROM books as b;
- DISTINCT
- 放在SELECT之后,字段名之前,表示互异,使SQL对任何元组只生成一份副本,且应用于所有列
- e.g. SELECT DISTINCT {columnName} FROM {tableName};
- ORDER BY
- 排序,BY后面跟字段名,默认为升序(从小到大)排列,多个排序规则用逗号隔开依次满足条件
- e.g. SELECT * FROM fruits ORDER BY price;
- DESC
- 配合ORDER BY,表示降序排列,放在字段名后,限制单列
- e.g. SELECT * FROM fruits ORDER BY price DESC;
- LIMIT beginColumnNum, ColumnAmount
- 限制结果,指定输出从beginColumnNum开始的(索引从0开始而不是1)的ColumnAmount行记录(常用于分页)
- e.g. SELECT * FROM {tableName} LIMIT 5, 10 (输出表中包括第6行开始的10条数据)
- SQL语句不分大小写,为了便于阅读可以将所有关键字大写,列和表名采用小写;
- SQL语句可以分一行给出,也可以分成多行;
- 不需要查询出明确的列时尽量采用通配符 * 可以提高性能。
4、条件查询 WHERE
| 基本操作符(1) | 说明 |
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| BETWEEN | 指定两值之间(含开始和结束),配合AND(BETWEEN valA AND valB) |
| IS NULL | 空值检查 |
- 表示要查询某字段为空值,不能使用"=NULL"或"<>NULL",而是"IS NULL"或"IS NOT NULL"
| 基本操作符(2) | 说明 |
| AND | “与”,同时过滤多个条件子句 |
| OR | “或”,配合检索匹配任一条件的记录 |
| NOT | “非”,否定它之后所跟着的条件(常配合IN、BETWEEN、EXISTS等) |
| IN | 指定条件范围,多值之间逗号隔开(功能类似OR) |
- NOT优先级高于AND,AND优先级高于OR
5、模糊查询 LIKE
| 操作符 | 说明 |
| LIKE | 表示搜索模式利用通配符匹配 |
| 通配符 | 说明 |
| % | 不限长度的字符序列匹配 |
| _ | 单个字符的序列匹配 |
| 转义符 | 说明 |
| \ | 表示某些特殊符号,如‘\%’表示匹配百分号字符,而不是通配符 |
6、分组查询 GROUP BY
| 关键字 | 说明 |
| GROUP BY | 根据字段进行分组,必须在WHERE子句之后,ORDER之前 |
| HAVING | 过滤分组,用法类似于WHERE,但分组只能用HAVING不能用WHERE |
- GROUP BY 可以包含多列,即分组嵌套,且嵌套后数据在最后规定的分组上进行汇总
- 分组列如果有NULL,则NULL会作为一个分组返回(多行NULL将分为一组)
- GROUP BY 如果用于输出,实际只会输出每组首行,而不是全部
7、聚合函数
| 函数 | 说明 |
| COUNT() | 求行数,在使用 * 通配符时才不会忽略NULL值的行 |
| AVG() | 求平均值,自动忽略NULL值的行 |
| MAX() | 求最大值,自动忽略NULL值的行 |
| MIN() | 求最小值,自动忽略NULL值的行 |
| SUM() | 求和,自动忽略NULL值的行 |
- 以上的算值函数,可以利用算术符作用多列,其含义是类似 “SELECT MAX(price*amount) FROM fruits” 如此用法
- 以上5种聚合函数,在MySQL 5.0 版本之后,其括号中的表达式可以使用前缀关键字DISTINCT
- 聚合函数多配合分组GROUP BY使用
8、子查询
8.1 子查询过滤
SELECT
cust_id
FROM
orders
WHERE
order_num IN
(
SELECT
order_num
FROM
orderitems
WHERE
prod_id = 'TNT2'
)
SELECT
cust_id
FROM
orders
WHERE
order_num IN
(
SELECT
order_num
FROM
orderitems
WHERE
prod_id = 'TNT2'
)
- 子查询应与WHERE匹配相同数量的列,通常是单个列匹配,结合IN等关键字使用
8.2 子查询作为计算字段
SELECT
cust_name,
cust_state,
(
SELECT
COUNT(*)
FROM
orders
WHERE
orders.cust_id = customers.cust_id
) AS orders
FROM
customers
ORDER BY cust_name
SELECT
cust_name,
cust_state,
(
SELECT
COUNT(*)
FROM
orders
WHERE
orders.cust_id = customers.cust_id
) AS orders
FROM
customers
ORDER BY cust_name
- 涉及外部查询的子查询叫做相关子查询,每次取外部查询的值和子查询所有行分别匹配,再取外部查询下一行和子查询匹配,循环至结束
- 子查询可以逐步建立用来进行测试和调试,这是很有技巧性的
9、创建计算字段
9.1 拼接字段
SELECT
Concat(vend_name, '(', vend_country, ')')
FROM
vendors
ORDER BY vend_name;
SELECT
Concat(vend_name, '(', vend_country, ')')
FROM
vendors
ORDER BY vend_name;
SELECT
Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
FROM
vendors
ORDER BY vend_name;
SELECT
Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
FROM
vendors
ORDER BY vend_name;
9.2 执行算术计算
SELECT
prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM
orderitems
WHERE
order_num = 20005;
SELECT
prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM
orderitems
WHERE
order_num = 20005;
10、处理数据的函数
10.1 文本处理函数
| Left() | 返回串左边的字符 |
| Length() | 返回串的长度 |
| Locate() | 找出串的一个子串 |
| Lower() | 将串转换为小写 |
| LTrim() | 去掉串左边的空格 |
| Right() | 返回串右边的字符 |
| RTrim() | 去掉串右边的空格 |
| Soundex() | 返回串的soundex值(将任何文本串转换为描述其语音表示的字母数字模式,你可以理解为,变成读音)p70 |
| SubString() | 返回子川的字符 |
| Upper() | 将串转换为大写 |
10.2 日期和时间处理函数
| AddDate() | 增加一个日期(天、周等 ) |
| AddTime() | 增加一个时间(时、分等 ) |
| CurDate() | 返回当前日期 |
| CurTime() | 返回当前时间 |
| Date() | 返回日期时间的日期那部分 |
| DateDiff() | 计算两个日期之差 |
| Date_Add() | 高度灵活的日期运算函数 |
| Date_Format() | 返回一个格式化的日期或时间串 |
| Day() | 返回一个日期的天数部分 |
| DayOfWeek() | 对于一个日期,返回对应的星期几 |
| Hour() | 返回一个时间的小时部分 |
| Minute() | 返回一个时间的分钟部分 |
| Month() | 返回一个日期的月份部分 |
| Now() | 返回当前日期和时间 |
| Second() | 返回一个时间的秒部分 |
| Time() | 返回一个日期时间的时间部分 |
| Year() | 返回一个日期的年份部分 |
10.3 数值处理
| Abs() | 返回一个数的绝对值 |
| Cos() | 返回一个角度的余弦 |
| Exp() | 返回一个数的指数值 |
| Mod() | 返回除操作的余数 |
| Pi() | 返回圆周率π |
| Rand() | 返回一个随机数 |
| Sin() | 返回一个角度的正弦 |
| Sqrt() | 返回一个数的平方根 |
| Tan() | 返回一个角度的正切 |
11、用正则表达式进行搜索
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '.000'
ORDER BY prod_name;
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '.000'
ORDER BY prod_name;
| [:alnum:] | 任意字母和数字,同[a-zA-Z0-9] |
| [:alpha:] | 任意字符,同[a-zA-Z] |
| [:blank:] | 空格和制表 |
| [:cntrl:] | ASCII控制字符 |
| [:digit:] | 任意数字 |
| [:graph:] | 与print相同但不包括空格 |
| [:lower:] | 任意小写字母 |
| [:print:] | 任意可打印字符 |
| [:punct:] | 既不在[:alnum:]也不在[:cntrl:]中的任意字符 |
| [:space:] | 包括空格在内的任意空白字符 |
| [:upper:] | 任意大写字母 |
| [:xdigit:] | 任意十六进制数字,同[a-fA-F0-9] |
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;
SELECT
prod_name
FROM
products
WHERE
prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;
12、其他
12.1 SELECT子句的顺序
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
《MySQL必知必会》[01] 基本查询的更多相关文章
- MySQL必知必会:组合查询(Union)
MySQL必知必会:组合查询(Union) php mysqlsql 阅读约 8 分钟 本篇文章主要介绍使用Union操作符将多个SELECT查询组合成一个结果集.本文参考<Mysql ...
- Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...
- django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询
from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- 《MySQL必知必会》整理
目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...
- mysql学习--mysql必知必会
上图为数据库操作分类: 下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...
- MySQL使用和操作总结(《MySQL必知必会》读书笔记)
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
随机推荐
- js通过添加随机数的方法,解决多张图片加载时由于缓存导致图片无法正确显示的问题
问题出现描述:当对列表中某个图片进行重新编辑时,提交后会发现图片列表仍会出现修改之前的图片,新图片并未覆盖. 问题出现原因:缓存问题. 解决办法:通过js方法,在每张图片路劲后面添加一个随机数,这样每 ...
- How to make sure your machine is always online without sleep
1. Create a "NeverOff" power plan: Control Panle->System and Security->Power Options ...
- 【Linux】文件存储结构
大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号. Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...
- GBK和UTF8的区别
GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中 ...
- html复选框
1.添加复选框 <input type="checkbox" id="yc" name="yc" value="year&q ...
- JVM(二)JVM内存布局
这几天我再次阅读了<深入理解Java虚拟机>之第二章"Java内存区域与内存溢出异常",同时也参考了一些网上的资料,现在把自己的一些认识和体会记录一下. (本文为博主 ...
- Java笔记—— 格式化的输入和输出
精确输出 可以用8个字符的宽度和小数点后了两个字符的精度打印x. double x = 10000.0 /3.0; System.out.printf("%8.2f\n",x);/ ...
- jQuery的less和scss之less的基本介绍(一)
简单的整理了一下less的基本用法,希望对大家有所帮助ㅎㅎ 一.less基础语法 1.声明变量:@变量名:变量值 使用变量:@变量名 例如 @color : #ff0000; @length : 10 ...
- C# 引用类型之特例string
在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应 ...
- 团队项目汇总beta
一.Daily Scrum Meeting[Alpha] 4.23-第一天 4.24-第二天 4.25-第三天 4.26-第四天 4.27-第五天 4.28-第六天 4.29-第七天 二.Daily ...