简单数据查询 (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 * FROMproduct
LIMIT 3, 3第三页: SELECT * FROMproduct
LIMIT 6, 3第 N页: SELECT * FROMproduct
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