用于操作数据库对象中所包含的数据
主要有三种形式:
sql:INSERT INTO 表名 (字段1,字段2,字段3,…) VALUES (‘值1’,‘值2’,‘值3’);
INSERT INTO users (id, name, password, email, birthday) VALUES (6,'
Hedgehog','123789','ciwei@gamil','2005-01-05');
代表给users表中添加id为6、name为Hedgehog、password为123789、emali为ciwei@gamil、birthday为2005-01-05的一组数据。
sql:UPDATE 表名 SET column_name=value [WHERE condition];
[WHERE condition]可以不加,加上就是筛选的条件,不加的话更改全表的数据。
UPDATE users SET name = 'rock' WHERE id=6;
意为将id为6的name更改为rock。
sql:DELETE FROM 表名 [WHERE condition];
DELETE FROM users WHERE name = 'rock';
执行后,就将name=rock的一组数据全部删除,但主键id已被占用,所以后面使用INSERT时,id不能为该组数据的id。
数据库查询语句,是数据库语言中最核心,最重要的语句。
SELECT * FROM 表名;
DISTINCT的作用是去掉SELECT查询返回的记录结果中重复的记录。
SELECT DISTINCT 字段 FROM 表名;
SELECT 字段 FROM 表名 WHERE 字段=?;
SELECT name FROM users WHERE id>1 AND id<4;
返回的结果为id在2,3中的name。
SELECT email FROM users WHERE name LIKE 'l%';
在模糊查询中,"%“表示通配符,例如在"l"后面加%就代表只要首字母是"l"就可以匹配,被搜索到;在"l"前加则表示只要最后一个字符是"l"则可以被匹配到;”%l%“表示只要数据中包含"l"这个字符,就可以被匹配到。
除了”%“还有”_",表示前面或后面有一个字符不确定。
连接查询
如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询
内连接 inner join
查询两个表中的结果集中的交集
外连接 outer join
左外连接 left join
(以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)
右外连接 right join
(以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)
select s.StudentNo,StudentName,SubjectNo,StudentResult
from student as s
inner join result as r
where s.StudentNo=r.StudentNo;
表示当result表中的StudentNo与student表中的StudentNo相同时,查询出符合条件的学生的编号、姓名、学科编号和对应成绩。
select s.StudentNo,StudentName,su.SubjectName,r.StudentResult
from student as s
inner join result as r
inner join subject as su
on s.StudentNo=r.StudentNo and su.SubjectNo=su.SubjectNo;
需求是因为在上一次查询中学科编号阅读性太差,需要用学科的名称代替,但学科的名称又在subject这张表中,所以需要先将student表与result表相连接,再让result表与subject相连接,于是将使用两次INNER JOIN。
数据表与自身进行连接
思路就是将一张表分解成两张表,通过将这两张表的共通的地方连接起来,从而进行自查询。
例如,下面这张表:
想要通过pid与categoryid有联系的地方,查询出两个id的对应数据
SELECT a.categoryName as 'fu',b.categoryName as 'zi'
from category as a,category as b
where a.pid=b.categoryid;
sql: ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照ASC升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
SELECT * FROM users
ORDER BY id DESC;