SQL入门与实践(二)查询与修改(草稿)

目录

 

 

一、查询

1、基本查询语句 SELECT

  • SELECT * FROM 表名1 别名1,表名2 别名2:查询表中的所有列(可以设置别名)
  • SELECT 1:用来检测数据库连接

2、条件查询 WHERE

  • SELECT * FROM 表名 WHERE 条件表达式:条件查询
  • SELECT * FROM 表名 WHERE 条件表达式1 AND 条件表达式2
  • SELECT * FROM 表名 WHERE 条件表达式1 OR 条件表达式2
  • SELECT * FROM 表名 WHERE NOT 条件表达式:也可以用<>
  • 【注】条件语句判断用一个= 不是两个等号
  • 【注】如不加括号,按照NOT AND OR的优先级运算
  • SELECT * FROM 表名 WHERE 字段名 LIKE '%字符串%':字段内容匹配,包含即可,%表示前/后还可以有内容
  • SELECT * FROM 表名 WHERE 字段名 BETWEEN * AND *
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';

3、投影查询:返回指定字段(列),降维打击(手动狗头) 

  • SELECT 字段1 别名1,字段2 别名2,字段3 别名3,字段4 别名4,... FROM 表名:抽取出其中的一部分字段
  • 【注】如果要使用中文字段名,用方括号括起来即可
  • 【注】英文字段名也可以用方括号,也可以不用

4、排序 ORDER BY

  • ORDER BY 字段名:放在WHERE条件语句之后使用
  • ORDER BY 字段名 DESC:倒序排列
  • ORDER BY 字段名1,字段名2:按照字段顺序依次作为条件进行排序
  • 【注】对字符串用ASCII码,默认升序排列,即从小到大

5、分页查询:将查询结果截取成段显示 LIMIT OFFSET

  • LIMIT M OFFSET N:从第N条开始,截取最多M条,放在ORDER BY排序之后(从0开始排)
  • 【注】超过所包含的数量时会返回空集,不报错
  • 【注】OFFSET可选
  • 【注】在MySQL中也可以写作 LIMIT N,M

6、聚合查询:使用聚合函数,进行针对查询结果的数学计算

  • SELECT COUNT(*) FROM ...:COUNT(*)返回查询到的记录数,是一个1行1列的二维表,列名为COUNT(*)
  • SELECT COUNT(*)  num FROM ...:将返回列名命名为num,默认0
  • SUM(字段名):求和,默认NULL
  • AVG(字段名):平均值,默认NULL
  • MAX(字段名):最大值(字符类型会返回排序最后的字符),默认NULL
  • MIN(字段名):最小值(类似上↑↑↑),默认NULL
  • 【注】SELECT语句中,可以引用上述函数或由其构成的表达式作为返回值
  • 因为聚合返回为二维表,也可以在返回值中依次写多个值(包括字段名、表达式、函数名)
 SELECT CEILING(COUNT(*) / 3) FROM students;

7、分组聚合:GROUP BY

  • SELECT ***  FROM *** *** GROUP BY 字段名:分组
  • SELECT 后的返回值中可以放入用以分组的字段名,以保证返回值能够正确表达
SELECT class_id,AVG(score) FROM students GROUP BY class_id;
SELECT class_id [班级],AVG(score) [平均分] FROM students GROUP BY class_id;

8、多表查询:SELECT * FROM 表1 表2【笛卡尔查询】

  • SELECT * FROM 表1 表2:是对两个表的乘积,前提是这些表是通过外键关联的,这样才能够做乘积
  • 又称笛卡尔查询,由于记录数为各表记录数乘积,所以要小心数据量过大
  • 多表合并可能出现列名重复的情况,可以利用投影查询设置别名
  • 要通过“表名、列名”的格式引用
  • 可以在FROM后给表设置别名以简化引用:
SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c;

9、连接查询

(1)内连接: SELECT *** FROM 表1 别名1 INNER JOIN 表2 别名2 ON 表1.某列名=表2.与之对应的列名(键)

  • 可选添加WHERE子句或ORDER BY子句
  • INNER JOIN:仅返回两张表中同时存在的行数据
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;

(2)外连接

  • RIGHT OUTER JOIN:返回等号右边表中存在的全部行数据,对左表中不存在相应数据的自动记为NULL
  • LEFT OUTER JOIN:返回左表存在的全部行数据,依次类推
  • FULL OUTER JOIN:全部数据,依次类推
  • UNION:内连接
  • MySQL不支持全连接FULL OUTER JOIN
  • 可以用集合交并补的关系看待这些概念

二、修改数据:CRUD Create Retrieve Update Delete 增查改删

1、增加 INSERT

  • INSERT INTO 表明 (字段1, 字段2,...) VALUES (值1, 值2,...)
  • 对自增主键不用给定;对具有默认值的字段,也可以不给定
  • 顺序不重要,只要值与字段对应即可
  • 可以一次添加多条记录,各自用()括起来,其间用,隔开,最后要用分号
  • 数据库本身的记录集没有顺序概念,只有查询时才会排序,所以一般添加只是加到结尾ORDER BY ID

2、删除 DELETE

  • DELETE FROM 表名 WHERE 筛选条件
  • 匹配不到不会报错
  • 不带WHERE会删库跑路!!!

3、更改 UPDATE

  • UPDATE 表名 SET 字段1=值1,字段2=值2,...WHERE 筛选条件:可以对多条进行操作
UPDATE students SET name='大牛', score=66 WHERE id=1;
  • UPDATE 表名 SET 表达式 WHERE 筛选条件:可以用表达式进行操作
  • 如果没有匹配到,不会报错,不会更新
  • UPDATE 表名 SET 表达式:可以没有WHERE条件,容易误操作谨慎!
  • MySQL中进行更新时会自动进行匹配检测并返回结果

参考链接:

SQL教程-廖雪峰

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值