SQL学习

查询数据

基本查询

SELECT * FROM <表名> :查询一个表的所有数据

SELECT * FROM <表名> WHERE <条件表达式> :根据条件查找表内数据,

如从students表中查询符合条件“分数在80以上”且“男生”性别:

SELECT * FROM students WHERE score >= 80 AND gender = 'M';  --且

SELECT * FROM students WHERE score >= 80 OR gender = 'M';   --或

SELECT * FROM students WHERE NOT class_id = 2;  --非

SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';  --多个条件查询


投影查询

SELECT 列1, 列2, 列3 FROM <表名> :让查询结果只返回指定列,如

SELECT id, score, name FROM students;

-- 使用投影查询,并将列名重命名:

SELECT id, score points, name FROM students;


排序

使用ORDER BY对查询数据进行排序

- 按score从低到高 ASC

SELECT id, name, gender, score FROM students ORDER BY score ASC ;

-- 按score从高到低

SELECT id, name, gender, score FROM students ORDER BY score DESC;

-- 如果score列有相同分数的,再按gender列排序

SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;

-- 查询一班的学生成绩,并按照倒序排序:

SELECT id, name, gender, score FROM students WHERE class_id = 1 ORDER BY score DESC;


分页

分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT <M> OFFSET <N>子句实现

-- 按score从高到低

SELECT id, name, gender, score FROM students ORDER BY score DESC;

-- 把结果集分页,每页3条记录。要获取第1页的记录

SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;-- 对结果集从0号记录开始,最多取3条


聚合查询

对于统计总数、平均数这类计算,SQL提供了专门的聚合函数如:SUM、AVG、MAX、MIN

--统计总数量, COUNT(*)和COUNT(id)实际上是一样的效果

SELECT COUNT(*) FROM students;

-- 使用聚合查询并设置结果集的列名为num:

SELECT COUNT(*) num FROM students;

-- 使用聚合查询并设置WHERE条件:

SELECT COUNT(*) boys FROM students WHERE gender = 'M';

-- 按class_id分组:各班人数

SELECT class_id, COUNT(*) num FROM students GROUP BY class_id; 



多表查询

查询多张表的语法是:SELECT * FROM <表1> <表2>

得到的行数是两个表行数的乘积,列数是两个表列数之和

SELECT s.id sid, s.name, s.gender, s.score, c.id cid, c.name cname FROM students s, classes c WHERE s.gender = 'M' AND c.id = 1;



连接查询

先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上,使用INNER JOIN语句

注意INNER JOIN查询的写法是:

                先确定主表,仍然使用FROM <表1>的语法;

                再确定需要连接的表,使用INNER JOIN <表2>的语法;

                然后确定连接条件,使用ON <条件...>,这里的条件s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需连接;

                可选:加上WHERE子句、ORDER BY等子句。

-- 选出所有学生,同时返回班级名称

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score FROM students s INNER JOIN classes c ON s.class_id = c.id;




修改数据

INSERT

向数据库表中插入一条新记录时,就必须使用INSERT语句:

INSERT INTO<表名> (字段1, 字段2, ...)VALUES(值1, 值2, ...);

INSERT INTO students (class_id, name, gender, score) VALUES (2, '大牛', 'M', 80);

-- 一次性添加多条新记录

INSERT INTO students (class_id, name, gender, score) VALUES (1, '大宝', 'M', 87), (2, '二宝', 'M', 81);

-- 查询并观察结果:SELECT * FROM students; 


UPDATE

更新数据库表中的记录,我们就必须使用UPDATE语句

UPDATE<表名>SET字段1=值1, 字段2=值2, ...WHERE...;

-- -更新id=5,6,7的记录

UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;

-- 使用表达式 更新score<80的记录

UPDATE students SET score=score+10 WHERE score<80; 

-- 查询并观察结果: 

SELECT * FROM students;   



DELETE

删除数据库表中的记录,我们可以使用DELETE语句

DELETE FROM <表名> WHERE ...;

-- 删除id=1的记录

DELETE FROM students WHERE id=1;

-- 查询并观察结果:

SELECT * FROM students;

-- 和UPDATE类似,不带WHERE条件的DELETE语句会删除整个表的数据

DELETE FROM students;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、SQL简介 SQL:Structured Query Language的缩写(结构化查询语言)是一种定义、操作...
    仕明同学阅读 2,156评论 1 23
  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 1,659评论 0 6
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,121评论 0 0
  • 练习链接 1 查询所有数据 查询students表的所有数据 SELECT * FROM students; SE...
    w_dll阅读 1,872评论 0 0
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,254评论 0 7