用表student为例(如有需要我会随时添加新的字段)
目录
1. 创建表
create table
# 创建表student
CREATE TABLE student(
id INT NOT NULL DEFAULT 1, -- 不为空,且默认为1
`name` VARCHAR(255) NOT NULL DEFAULT '' -- 不为空,且默认为空字符串)
CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE INNODB;
# CHARACTER SET ==> CHARSET 定义字符集(不定义就默认该数据库的字符集)
# COLLATE 定义校验规则
# ENGINE 定义引擎
2. 添加信息
insert into
# 注意添加的顺序要按照创建表的顺序
# 注意添加数据的类型也要匹配
INSERT INTO student VALUES(1, 'Marry');
# 也可以指定添加的列(字段)
INSERT INTO student(id, `name`) VALUES(1, 'Marry');
3. 修改表中数据
update(慎用)
# 修改表中所有数数据(慎用)
UPDATE student SET `name` = 'Jack'; -- 所有人的name 将会全成为'Jack'
# 修改 将id = 1 的学生名字改为Tom
UPDATE student SET `name` = 'Tom' where id = 1;
4. 删除表中数据
delete(慎用)
# 删除表中所有数据
DELETE FROM student;(慎用)
# 删除表中指定数据
# 删除表中名字为Marry的信息
DELETE FROM student WHERE `name` = 'Marry'
5. 查找表中数据
select
# 查询表中所有学生的信息
SELECT * FROM student;
# 查询表中所有学生的姓名
SELECT `name` FROM student
# 过滤表中的重复数据distinct
SELECT DISTINCT * FROM student -- 要查询的记录要求每个列(字段)都相同才可以去重
order by的使用
# 升序降序order by的使用
-- 对id排序后输出【升序】。-- 默认是Asc 从上到下由小到大排序
SELECT * FROM student ORDER BY id;
-- 【降序】 加DESC 从上到下由大到小排序
SELECT * FROM student ORDER BY id DESC;
COUNT(*) 和 COUNT(`列`) 的使用和区别
-- 统计函数
-- 统计一个班级共有多少学生? 需要判断在后面加入where判断语句
SELECT COUNT(*) FROM student;
SELECT COUNT(`name`) FROM student;
# COUNT(*) 和 COUNT(`列`) 的区别
-- COUNT(*) 就是有多少行数据 数据中就算有空数据,也会计入总数中
-- COUNT(`列`) 是有多少行不为空的数据
COUNT(*) 就是有多少行数据。 数据中就算有空数据,也会计入总数中
COUNT(`列`) 是有多少行不为空的数据
例如有一个表(name):
COUNT(*) 查询后会显示4,因为就算是null也会包含在总数中
而COUNT(`列`)查询后会显示3,统计中排除了为null的这一行
演示avg的使用
# 演示avg的使用 【算平均数】
-- 例如计算年龄的平均值
SELECT AVG(age) FROM student;
演示max 和 min 的使用
# 演示max 和 min 的使用
SELECT MAX(age) FROM student; -- 最大年龄
SELECT MIN(age) FROM student; -- 最小年龄
6. 删除整个表
drop(慎用)
# 删除表student
DROP TABLE student;
7. 修改表名
rename
# 给表student 改名为students
RENAME TABLE student TO students
8. 查看并且修改表结构
alter
# 查看student 的表结构
DESC student;
# 在学生表上增加一个列(字段) 性别sex, varchar类型
ALTER TABLE student
ADD sex VARCHAR(16) NOT NULL DEFAULT '男'; -- 添加列sex 不为空 默认为男
# 修改name列,使长度为65
ALTER TABLE student
MODIFY `name` VARCHAR(65) NOT NULL DEFAULT ''; -- 定义长度,不为空,默认为空串
# 将列名`name` 修改为`user_name`
ALTER TABLE student
CHANGE `name` `user_name` VARCHAR(32) NOT NULL DEFAULT ''; -- 定义长度,不为空,默认为空串
# 修改表的字符集
ALTER TABLE student CHARACTER SET utf8;
ALTER TABLE student CHARSET utf8;
9.字符串相关的函数
# CHARSET(列名) 返回字符串字符集
SELECT CHARSET(name) FROM emp
# CONCAT (列名1, [... ], 列名2) 连接字符串,将多个列拼接成一列
SELECT CONCAT(name, ' job is ', job) FROM emp
# INSTR (string ,substring ) 返回substring在string中出现的位置,没有返回0
SELECT INSTR('hanshupingjiaoyu', 'jiao') FROM DUAL;
# dual 亚元表,是一个系统的表,可以作为默认的测试表来使用
# UCASE (列名 ) 转换成大写
SELECT UCASE(name) FROM emp;
# LCASE (列名 ) 转换成小写
SELECT LCASE(name) FROM emp;
# LEFT (string2 ,length ) 从string2列中的左边起取length个字符
SELECT LEFT(name, 2) FROM emp;
# RIGHT (string2 ,length ) 从string2列中的右边起取length个字符
SELECT RIGHT(name, 2) FROM emp;
# LENGTH (string ) string列每一行的长度[按照字节来返回的]
SELECT LENGTH(name) FROM emp;
# REPLACE (str ,search_str ,replace_str )
-- 在str中用replace_str替换search_str
-- 如果是manager 就替换成 经理
SELECT name, REPLACE(job, 'MANAGER', '经理')
FROM emp;
# STRCMP (string1 ,string2 ) 逐字符比较两字串大小
SELECT STRCMP('hsp', 'hsp') FROM DUAL;
# SUBSTRING (列 ,[position] ,[length ])
# 从列 的position开始【从1开始计算】,取length个字符
# 从ename列中第一个字符开始取到第三个字符结束
SELECT SUBSTRING(ename, 1, 3) FROM emp;
# LTRIM (列名) RTRIM (列名) TRIM(列名)
# 去除前端空格
SELECT LTRIM(' Marry ') FROM DUAL;
# 去除后端空格
SELECT RTRIM(' Marry ') FROM DUAL;
# 去除前后端空格
SELECT TRIM(' Marry ') FROM DUAL;
10.数学相关函数
# ABS(num) 绝对值
SELECT ABS(-10) FROM DUAL;
# BIN(decimal_number) 十进制转二进制
SELECT BIN(10) FROM DUAL;
# CEILING(number) 向上取整,得到比number大的最小整数
SELECT CEILING(2.4) FROM DUAL;
# CONV(number, fore_base转换前进制, to_base转换后进制)
SELECT CONV(8, 10, 2) FROM DUAL;-- 解读:将十进制的8,转成二进制后输出
# FLOOR(number) 向下取整,得到比number小的最大整数
SELECT FLOOR(1.1) FROM DUAL;
# FORMAT(number, decimal_places小数后几位) 格式化 保留小数位数(按照四舍五入)
SELECT FORMAT(78.123458, 2) FROM DUAL;
# 使用数学方法,给group by中的平均薪水四舍五入一下小数点后两位
SELECT FORMAT(AVG(sal), 2), deptno
FROM emp
GROUP BY deptno;
# LEAST(number1, number2, number3,...) 求最小值
SELECT LEAST(5, -2, 9, 3) FROM DUAL;
# MOD(number1, number2) 求余
SELECT MOD(10, 3) FROM DUAL;
# RAND() 每次返回不同的随机数 其范围为 0 <= v <= 1
SELECT RAND() FROM DUAL;
# RAND(seed) 生成随机数后,如果seed不变,生成的随机数也不会改变
SELECT RAND(5) FROM DUAL;