DML语句
DML 实现对数据记录的增删改查
1 新增数据(插入记录)
语法:INSERT INTO 表名(字段名1,字段名2, ... ) VALUES(字段值1, 字段值2,, ....)
-- 新增记录
INSERT INTO student (学号,姓名,性别,生日,手机) VALUES('a002','张三',1,'1999-09-09','13612345678')
注意:
1)数值的数量和顺序必须和字段名的数量和顺序一致
2)插入数值的数据类型必须和字段的数据类型匹配
3)插入数值如果是字符串类型、日期类型需要加单引号包起来。数值类型不用加。
4)汉字字段或特殊符号,如果提示有错误,使用反引号包起来。
2 修改数据(更新记录)
语法: UPDATE 表名 SET 字段名1=值1,字段名2=值2, ... WHERE 条件
注意: where 后面的条件必须要设置准确,符合条件记录才修改。
-- 修改记录
UPDATE student SET 学号='a003',手机='0000000000' WHERE id=3
3 删除数据(删除记录)
语法: DELETE FROM 表名 WHERE 条件
-- 删除记录
DELETE FROM student WHERE id=3
4 查询记录
语法: SELECT 字段名1 AS 别名1,字段名2 AS 别名2,... FROM 表名
WHERE 条件1(= > < >= <=)
AND 条件2
OR 条件3
LIKE 模糊查询,匹配like指定的字符串
'李%' 查询所有姓李的
'%李' 查询以李结尾的
'%李%' 查询包含李的
NOT LIKE '李%' 查询所有不是李开头的
ORDER BY 字段名 DESC(ASC) DESC降序(从大到小) ASC升序(从小到大)一般放在最后
例:查询所有姓李的记者
SELECT * FROM caijing2016 WHERE title LIKE '%记者%' AND name LIKE '李%'
5 多表联合查询
因为数据库的范式标准,数据可能被拆分放在多个表中,给查询带来一些问题,必须要联合两个表甚至多个表实现查询想要的数据。
a) 两表联合查询
内连接语法:
SELECT 表1.字段名1,表1.字段2, 表2.字段1, .... FROM 表1 INNER JOIN 表2 ON 表1.联结字段 = 表2.联结字段
-- 两表内连接查询
SELECT
`学生`.`学号`,
`学生`.`姓名`,
`班级`.`班主任`,
`班级`.`教室`,
`班级`.`班长`
FROM
`学生`
INNER JOIN `班级` ON `学生`.`班号` = `班级`.`班号`
左连接语法:(左边为主表,右边为从表)
SELECT 表1.字段名1,表1.字段2, 表2.字段1, .... FROM 表1 LEFT JOIN 表2 ON 表1.联结字段 = 表2.联结字段
-- 两表左连接查询
SELECT
`学生`.`学号`,
`学生`.`姓名`,
`班级`.`班主任`,
`班级`.`教室`,
`班级`.`班长`
FROM
`学生`
LEFT JOIN `班级` ON `学生`.`班号` = `班级`.`班号`
查询结果:主表中的数据全部显示,从表中如果没有对应数据以null 填充。
6 多表联合
语法:
SELECT 表1.字段名1,表1.字段2, 表2.字段1, .... FROM 表1
INNER JOIN 表2 ON 表1.联结字段 = 表2.联结字段
INNER JOIN 表3 ON 表1.联结字段 = 表3.联结字段
SELECT
`学生`.`姓名`,`课程`.`课程名`,`选修`.`成绩`
FROM
`选修`
LEFT JOIN `学生` ON `选修`.`学号` = `学生`.`学号`
LEFT JOIN `课程` ON `选修`.`课程编号` = `课程`.id
WHERE `学生`.`姓名` LIKE '%斛晓强%'