SHOW
- show + databases/tables; ====>返回数据库中可用的(数据库/表)一个列表。
- show columns from + table====>返回表中每一个字段的信息(如:允许为NULL,键信息,默认值,以及其他)。
- show status;====>用于显示广泛的服务器状态信息。
- show create database/table;====>分别用来显示创建特定数据库或表中的MySQL语句。
- show grants;====>用来显示授予用户(所有用户或特定用户)的安全权限。
SELECT
检索数据
- select * from student;====>搜索student表中全部内容。
- select name form student;====>搜索student表中name列的内容(单列检索)。
- select id,name from dtudent;====>搜索student表中id,name中的内容(多列检索)。
- select DISTINCT vend_id from products;====>搜索product表中vend_id的值并且去重。
- select id from student LIMIT 5;====>返回搜索内容的前五行。
- select id from student LIMIT 5,5;====>返回搜索内容行5开始的5行
- select id from student LIMIT 4 OFFSET 3;====>意为行3开始取4行
- select student.id from student;====>使用完全限定的名字来引用类(同时使用表名和列字)
排序检索数据(ODER BY)
- select id form student ODER BY id; ====>检索后的id 进行排序。
- select id ,name form student ODER BY id,name;====>检索后进行先按id 进行排名,在按name进行排名。
- select id, name from student ODER BY id,name DESC;====> 按照降序排序。不写DESC或者ASC默认为升序
- 使用ODER BY + LIMIT 找出最贵重的roducts
- select price from products ODER BY price DESC LIMIT 1;
过滤数据(WHERE)
- select * from student WHERE id = 2;====>检索id为2 的学生信息。
-
BETWEEN
- select * from student WHERE id BETWEEN 5 AND 10;====>检索id为 5 到10 的学生
-
空值检查
-
select * from student WHERE email IS NULL;====>检索邮箱为空的学生
-
AND
- select * from WHERE id = 2 AND name =‘张三’;====>检索id 为2,并且名字为张三的数据。
-
OR
- select * from WHERE id = 2 OR name =‘张三’;====>检索id 为2,或者名字为张三的数据。
-
关于AND 和 OR ,AND 优先级更高,两者配合可以进行更高级的过滤。但是为了更好的得到想要的结果时,使用圆括号可以进行解决不必要的麻烦。
-
IN
- select * from student WHERE id IN (10,25) ;检索学号为10或者25的学生。与OR的功能相同。
- IN操作符相对于OR的优点
- 更清楚更直观
- 计算的次序更容易管理
- IN一般比OR操作符清单执行更快
- 可以包含其他select 语句,能够更动态的创建where子句。
-
NOT
- select * form student WHERE id NOT NOT ( 10,25) ODER BY name;检索学号不为10,25并且按照顺序排列。
通配符进行过滤(LIKE)
- %
- select * from student WHERE name LIKE ‘刘%’; 找出姓刘的学生,不管刘后面跟几个字都会输出。
- _
- select * from student WHERE name LIKE ‘刘_’;找出姓刘的并且刘后面只跟一个字。
使用数据处理函数
使用实例:
- 使用Upper() 函数来进行将文本转换为大写
- select english_name, upper(english_name) AS english_name FROM student ODER BY name;
- 文本处理函数
- 日期和时间处理函数
- 常用数值处理函数
聚集函数
- AVG使用示例
- select AVG(price) AS avg_price FROM products;====>使用AVG返回所有产品的平均价格。 avg_price 是一个别名。
- COUNT注意
- 使用COUNT(*)时,返回整张表数据的行数,不管是空值还是非空值。
分组数据(GROUP BY/HAVING)
-
GROUP BY
- 使用 GROUP BY 创建分组。GROUP BY子句指示MYSQL分组数据,然后对每个组而不是整个结果集进行聚集。
-
使用 GROUP BY 的注意事项
- GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,
为数据分组提供更细致的控制。 - 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上
进行汇总。换句话说,在建立分组时,指定的所有列都一起计算
(所以不能从个别的列取回数据)。 - GROUP BY子句中列出的每个列都必须是检索列或有效的表达式
(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在
GROUP BY子句中指定相同的表达式。不能使用别名。 - 除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子
句中给出。 - 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列
中有多行NULL值,它们将分为一组。 - GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前
- GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,
-
** GROUP BY 与ODER BY 的区别**
-
HAVING
- 使用having 来过滤分组
- 删选出分组中的总数大于或等于2的id
-
HAVING和WHERE的差别
- WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。
- WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。
- HAVING 可以使用聚集函数,而WHERE不可以。
-
SELECT 子句及顺序
INSERT
- 插入完整的一行====>INSERT INTO student(id,name,email) VALUES(1,‘张三’,‘123456@qq.com’);
- 插入行的一部分即省略列。必须满足以下某个条件
- 该列定义允许为NULL值。
- 在表定义中给出默认值。
- 如果对表中不允许NULL值并且没有默认值的列不给出值,则插入不成功。
- 插入多行数据
- INSERECT INTO 表(字段1, …, 字段N) values
(value1, …),
(value2, …),
(value3, …) ;
- INSERECT INTO 表(字段1, …, 字段N) values
UPDATE/DELETE
- UPDATE
- 更新表中特定行====>UPDATE student SET email = ‘345678@qq.com’ WHERE name=‘张三’ ;更新名字为张三的邮箱。
- 用where语句特定某一行,如果没有where限定,会改掉全部表中的某列的值
- 更新表中多个列====>UPDATE student SET name=‘张三’,email='1234567@qq.com’WHERE name =‘李四’;将李四的名字和邮箱修改。
- DELETE
- DELETE FROM student where name=‘张三’;删除张三的内容
- DELETE删除的不是表,而是表的内容
- ****
CREATE/ALTER/DROP
-
CREATE
- 创建一张学生表
CREATE TABLE student (
id INT,
sn INT comment ‘学号’,
name VARCHAR(20) comment ‘姓名’,
qq_mail VARCHAR(20) comment ‘QQ邮箱’ NULL
);
- 创建一张学生表
-
ALTER
-
添加一个新列====>ALTER TABLE student ADD telephone VARCHAR(20) comment ‘电话号码’;增加一个新列,必须制定其数据类型
-
删除一个新列====>ALTER TABLE student DROP telephone ;删除一个电话号码列。
-
DROP
-
drop table student;====>删除student表