MYSQL单表查询

简单数据查询 (SELECT 选择查询列表)(FROM提供数据源)

  • 和创建表时的顺序一致。匹配所有的字段SELECT *(表示所有列)FROM table_name (表名) :表示查询表中所有信息

  • 可以自己调整顺序,在select后边加上要查询的列名。SELECT A,B,C FROM table_name (表名):表示查询A,B ,C列中所有信息

消除结果中重复的数据

  • SELECT DISTINCT 列名 FROM 表名

实现数学运算查询

  • 对NUMBER型数据可以使用算数操作符创建表达式(+ - * /)

  • 对DATE型数据可以使用部分算数操作符创建表达式 (+ -)

设置列名的别名

  • 语法:SELECT 列名 as 新列名 (as可以省略)FROM table_name

设置显示格式

  • 使用CONCAT函数来连接字符串 语法 SELECT CONCAT(列名,“ 字符串”,列名)FROM table_name

过滤查询(字符串和日期要用单引号扩起来)

  • SELECT 列名 FROM table_name WHERE 条件1 AND/OR 条件2;

逻辑运算

优先级规则(() 小括号跨越所有运算符优先级)

范围查询-BETWEEN AND

  • 语法:SELECT 列名 FROM table_name WHERE 列名 BETWEEN AND(闭区间)

集合查询(IN)

  • 使用IN运算符,判断列的值是否在指定的集合中

  • 语法:SELECT 列名 FROM table_name WHERE 列名 IN(值1,值2....)

空值查询 IS NULL

  • 语法:SELECT 列名 FROM table_name WHERE IS NULL

  • 注意 列的值是 null 和空字符串不一样,如果是空字符串 应该 = ""

模糊查询 LIKE

  • 语法:SELECT 列名 FROM table_name WHERE LIKE 通配符 字符串 通配符 ( 例如% ML%)

  • %:通配符:可表示零或多个任意的字符。

  • _:通配符:可表示任意的一个字符

结果排序(使用ORDER BY子句将结果的记录排序)

  • 升序 ASC : 升序,缺省--不写默认

  • DESC: 降序。

  • 注意:ORDER BY 语句出现在SELECT语句的最后

  • SELECT 列名 FROM 表名 ORDER BY 列名 ASC/DESC

分页查询 LIMIT

  • 假分页(逻辑分页): 把数据全部查询出来,存在于内存中,翻页的时候,直接从内存中去截取.真分页(物理分页): 每次翻页都去数据库中去查询数据.

    假分页: 翻页比较快,但是第一次查询很慢,若数据过大,可能导致内存溢出.真分页: 翻页比较慢,若数据过大,不会导致内存溢出.

  • 语法:SELECT 列名 FROM table_name LIMIT SELECT 列名 FROM table_name LIMIT beginIndex(表示页数), pageSize(表示每页展示的行数

  • beginIndex = (currentPage-1) * pageSize;第一个: 表示本页,开始索引(从0开始).SELECT 列名 FROM table_name LIMIT 0 ,pageSize;第二个?: 每页显示的条数SELECT 列名 FROM table_name LIMIT beginIndex ,3;规定:每页显示3条数据. pageSize = 3第一页: SELECT * FROM product LIMIT 0, 3第二页: SELECT * FROM product LIMIT 3, 3第三页: SELECT * FROM product LIMIT 6, 3第 N页: SELECT * FROM product LIMIT (N-1)*3, 3

聚集函数

  • COUNT:统计结果记录数 如果列的值为null 不会计算在内的

  • MAX: 统计计算最大值

  • MIN: 统计计算最小值

  • SUM: 统计计算求和

  • AVG: 统计计算平均值 如果列的值为null 不会计算在内的

  • 语法 SELECT 聚集函数+列名 FROM table_name +其他判断条件

  • CAST函数 :类型转换 CAST(列名 as 类型)

  • CONVERN :类型转换 CONVERN(列名 ,类型)

    ---- 可以转换的类型是有限制的。这个类型可以是以下值其中的一个:

    ​ 二进制,同带binary前缀的效果 : BINARY

    ​ 字符型,可带参数 : CHAR()

    ​ 日期 : DATE

    ​ 时间: TIME

    ​ 日期时间型 : DATETIME

    ​ 浮点数 : DECIMAL

    ​ 整数 : SIGNED

    ​ 无符号整数 : UNSIGNED

  • IFNULL: IF(列为null ,默认值)

分组查询GROUP BY

  • 可以使用GROUP BY 子句将表中的数据分成若干组,再对分组之后的数据做统计计算,一般使用聚集函数才使用GROUP BY.

  • GROUP BY 后面的列名的值要有重复性分组才有意义;

  • 使用HAVING字句,对分组之后的结果作筛选;

  • 不能在 WHERE 子句中使用组函数(注意);可以在 HAVING 子句中使用组函数;

  • 一般 HAVING有GROUP BY的操作时才用

MYSQL进阶

DDL(用来对表结构进行操作)

  • 创建表

  • create table 表名(列名 类型(长度),。。。。)

  • 添加字段

  • alter table 表名 add 字段名 字段类型(长度)

  • 修改表名

  • alter table 表名 rename 新表名

  • 删除表

  • drop table 表名

  • 删除字段

  • alter table 表名 drop 字段名

  • 修改字段类型

  • alter table 表名 modity 字段名 新类型(长度)

DML(用来对表中的内容进行操作 增删改查)

  • 添加数据 insert

  • insert into 表名 (字段名,。。。) values (值1,。。。)添加单条数据

  • insert into 表名 (字段名,。。。) values (值1,。。。),(值1,。。。)添加多条数据

  • 修改 update

  • update 表名 set 字段名= 修改的值; (列表值全部修改)

  • update 表名 set 字段名= 修改的值 where 主键=修改的值; (修改的具体某个值)

  • 删除 delete

  • delete from 表名; (表中内容全部删除)

  • delete from 表名 where 主键 ; (删除的具体某一个对象的值)

  • 查找数据

  • select 字段名或* from 表名

多表查询

笛卡儿积

  • 产生原因:多个表没有直接的连接条件 导致数据组合在一起

  • 消除笛卡儿积 通过外键来消除 外键是另外一张表的主键

内连接

  • 隐式内连接: select A.* ,B.* from table A,table B where A.id=b.id

  • 显式内连接(inner join)(取交集)

  • select A.,B. from table A inner join table B on A.id= B.id

外连接

  • 左外连接(lift join ) 以左边为准 右边的数据没有 以null显示

  • 举例 :select A.,B. from table A left join table B on A.id= B.id

  • 右外连接 (right join) 以右边为准 左边的数据没有 以null显示

  • 举例 : select A.,B. from table A right join table B on A.id= B.id

自连接 (自己把自己作为另外一张表)

  • 子查询:一个查询语句可以放在另一个查询中;内层查询的结果可以作为外层查询条件。一般的,嵌套在WHERE或者FROM字句中。

  • 举例:单行单列子查询:需求: 查询零售价比罗技MX1100更高的所有商品信息。SELECT * FROM productWHERE salePrice > (SELECT salePrice FROM product WHERE productName = '罗技MX1100')

  • 单行多列子查询:需求: 查询分类编号和折扣与罗技M100相同的所有商品信息。SELECT * FROM productWHERE (dir_id,cutoff)=(SELECT dir_id,cutoff FROM product WHERE productName = '罗技M100')

常用函数(与string中方法联合记忆)

  • 小写转大写

  • SELECT UPPER("itsource")

  • 大写转小写

  • SELECT LOWER("ITSOURCE")

  • 替换

  • SELECT REPLACE(“功夫小宝”,“小宝”,“熊猫”) 结果为 “功夫熊猫”

  • 截取

  • SELECT SUBSTR (字符串,开始位置,截取长度)

  • 去空

  • SELECT TRIM ( 字符串 ) 只能去掉两边的空格

  • SELECT LTRIM ( 字符串 ) 只能去掉左边空字符串

  • SELECT RTRIM ( 字符串 ) 只能去掉右边空字符串

  • 反转 REVERSE

  • SELECT REVERSE( 字符串 )

  • 获得长度(跟编码集有关 不同编码集的字符串所占用的字节长度不一样)

  • SELECT LENGTH(字符串)

  • 四舍五入

  • SELECT ROUND(999.666) 默认取整 结果为 1000

  • SELECT ROUND(999.666,2) 表示保留小数点后两位 结果为 999.67

  • 日期

  • SELECT LOCATIME() /NOW()

数据的备份与恢复

  • 备份:管理员运行cmd 不要登录mysqlmysqldump -uroot -p密码 数据库名称> 存储路径/文件名.sql

  • 恢复mysqldump -uroot -p密码 数据库名称< 存储路径/文件名.sql