数据库学习——SQL之SELECT查询语句

SELECT的基本使用

SELECT 指定列/*
FROM 表名;

Tips:

一般情况下,最好不要使用通配符‘*’。

虽然*节省输入查询语句的时间,但降低查询和所使用的应用程序的效率。

通配符的优势是:当不知道所需要的列的名称时,可以通过它获取它们。

在生产环境下,不推荐你直接使用 SELECT * 进行查询

列的别名

SELECT last_name AS name, commission_pct comm
FROM employees;
SELECT last_name "Name", salary*12 "Annual Salary" 
FROM employees;

重命名一个列,可(不)使用AS,可(不)使用双引号

去除重复行

SELECT DISTINCT depatment
FROM employees;

空值

  • 所有运算符或者列值遇到null值,运算结果都是null
  • MySQL中,空值!=字符串,空字符串的长度是0,控制的长度为空。MySQL中,空值占用空间。

着重号

#错误
SELECT * FROM ORDER;
#正确
SELECT * FROM `ORDER`;

使用着重号防止表中的字段、表名等和保留字、数据库系统或常用方法冲突

显示表的结构

DESCRIBE employees;DESC employees;
+----------------+-------------+------+-----+---------+-------+
| Field          |        Type | Null | Key | Default | Extra | 
+----------------+-------------+------+-----+---------+-------+
| employee_id    |      int(6) |   NO | PRI |       0 |       | 
| first_name     | varchar(20) |  YES |     |    NULL |       | 
+----------------+-------------+------+-----+---------+-------+

各字段的含义:

  • Field:字段名称
  • Type:字段类型
  • Null:表示该列是否可以存储NULL值
  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次
  • Default:表示该列是否有默认值,如果有,那么值是多少。
  • Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

运算符

算术运算符

+ - * / %

mysql> select 1+2;
+-----+
| 1+2 |
+-----+
|   3 |
+-----+
1 row in set (0.01 sec)

mysql> select 1/2;
+--------+
| 1/2    |
+--------+
| 0.5000 |
+--------+
1 row in set (0.00 sec)

mysql> select '5a'+2;  -- a=1
+--------+
| '5a'+2 |
+--------+
|      7 |
+--------+
1 row in set, 1 warning (0.00 sec)

mysql> select 'a5'+2; -- a=0
+--------+
| 'a5'+2 |
+--------+
|      2 |
+--------+
1 row in set, 1 warning (0.00 sec)

比较运算符

= !=/<> < > <= >=

  • in或者not in

    in用于判断某个列的取值是否为指定的值,使用in运算符时指定的值是离散的数据,不是连续值

select * from tb_student where age in(18,28,15)
含义是 age=18 or age=28 or age=15
select * from tb_student where age not in(18,28,15)
含义是 age!=18 and age!=28 and age!=15
  • between and

    用于判断数据是否在指定的范围内,连续值

select * from tb_student where score between 60 and 85;
  • like/not like

    主要针对字符串类型数据进行模糊查询,通配符_和%

select * from tb_student where name not like '张%';
  • is null/is not null

逻辑运算符

语法说明
&&或anda and b或者 a && b逻辑与,a和b都为true,则为true
||或者ora || b或者 a or b逻辑或,一个为true,则为true
not或者!not a或者!a逻辑非
mysql> SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL; 
+----------+---------+------------+------------+
| 1 AND -1 | 0 AND 1 | 0 AND NULL | 1 AND NULL | 
+----------+---------+------------+------------+
|        1 |       0 |          0 |       NULL | 
+----------+---------+------------+------------+
1 row in set (0.00 sec)

mysql> SELECT 1 OR -1, 1 OR 0, 1 OR NULL, 0 || NULL, NULL || NULL; 
+---------+--------+-----------+-----------+--------------+
| 1 OR -1 | 1 OR 0 | 1 OR NULL | 0 || NULL | NULL || NULL | 
+---------+--------+-----------+-----------+--------------+
|       1 |      1 |         1 |      NULL |         NULL | 
+---------+--------+-----------+-----------+--------------+
1 row in set, 2 warnings (0.00 sec)

位运算符

& | ^ ~ >> <<

运算符的优先级

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXpzP6aI-1651221695715)(C:\Users\pon18\AppData\Roaming\Typora\typora-user-images\image-20220429110933555.png)]

正则表达式查询

五类聚集函数

聚集函数用于对一个集合中的数据进行处理,不是一行一行的数据

count统计行数 sum求和 max最大值 min最小值 avg平均值

count计数

语法:count([all/distinct] 列名称)

select count(*) from tb_student; 

select count(1) from tb_student; 

select count(distinct dept) from tb_student; -- 获取系的个数 
mysql> select * from tb_student; 

select count(dept) from tb_student; -- 进行计数统计时,null不参与统计

统计值

用于数值类型的列,不要用于其他类型。max min sum avg

  • max/min可以用于日期类型比较,最新的日期最大
mysql> select max(age) from tb_student; 
+----------+ 
| max(age) | 
+----------+ 
|       19 | 
+----------+ 
1 row in set (0.00 sec) 

mysql> select min(age) from tb_student;
+----------+ 
| min(age) | 
+----------+ 
|       16 |
+----------+ 
1 row in set (0.00 sec)

mysql> select avg(age) from tb_student; -- null值不参与计算,除非使用空值处理函数 将其转换为确定数值才可以 
+----------+ 
| avg(age) |
+----------+ 
|  16.7143 | 
+----------+ 
1 row in set (0.00 sec)

mysql> select sum(age),max(age),min(age),avg(age) from tb_student;

分组

group by

可以使用group by子句对查询结果进行分组处理,经常会使用聚集函数

  • 如果不使用分组,聚集函数则用于处理所有查询结果数据

  • 如果使用分组,则分别作用于各个分组查询的结果数据

获取男女生的平均年龄

mysql> select sex,avg(age) from tb_student group by sex; 
+------+----------+ 
| sex  | avg(age) | 
+------+----------+ 
|    1 |  17.0000 | 
|    0 |  16.0000 | 
| NULL |  16.0000 | 
+------+----------+ 
3 rows in set (0.00 sec)
having

可以对分组进行条件选择

需要获取人数多余2人的不同性别学生的平均年龄

  • 按照性别分组

  • 要统计的组必须人数多余2人,小于等于2人的分组不进行显示处理

select sex,avg(age) from tb_student group by sex having count(1)>2;
having和where之间的区别

只有满足条件的数据才会输出显示

最大区别在于:作用的对象不同

  • where子句用于基表或者视图,从中选择满足条件的元组

  • having子句用于分组,从多个分组中选择满足条件的分组

排序

ORDER BY
SELECT 指定列
FROM 表名
ORDER BY 某一列 ASC[升序]/DESC[降序]
#ORDER BY 在SELECT 语句的结尾
#多列排序,按顺序以此排列

分页

LIMIT[位置位移量] 行数
-- 前10条记录: 
SELECT * FROM 表名 LIMIT 0,10; 
或者SELECT * FROM 表名 LIMIT 10;
-- 第11至20条记录: 
SELECT * FROM 表名 LIMIT 10,10;
-- 第21至30条记录: 
SELECT * FROM 表名 LIMIT 20,10;

MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT 4,3;”返回的结果相同。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL数据库查询语句可以根据具体的需求使用不同的语句来实现。以下是一些常用的SQL查询语句: 1. SELECT语句:用于从数据库中选取数据。使用SELECT语句时,可以选择列名、表名和条件来筛选所需数据。例如,使用SELECT语句查询学生表中的所有学生姓名和年龄: SELECT 姓名, 年龄 FROM 学生表; 2. WHERE子句:用于在查询中添加条件。使用WHERE子句可以根据指定的条件过滤数据。例如,使用WHERE子句查询学生表中年龄大于18岁的学生: SELECT * FROM 学生表 WHERE 年龄 > 18; 3. INSERT INTO语句:用于向数据库表中插入新的数据。使用INSERT INTO语句需要指定表名和要插入的数据。例如,使用INSERT INTO语句将一条新的学生记录插入到学生表中: INSERT INTO 学生表 (姓名, 年龄, 成绩) VALUES ('张三', 20, 90); 4. UPDATE语句:用于更新数据库表中的数据。使用UPDATE语句需要指定表名、要更新的列和更新后的值,还可以使用WHERE子句来限制更新的范围。例如,使用UPDATE语句将学生表中姓为李的学生年龄更新为21岁: UPDATE 学生表 SET 年龄 = 21 WHERE 姓 = '李'; 5. DELETE语句:用于从数据库表中删除数据。使用DELETE语句需要指定表名和要删除的数据的条件。例如,使用DELETE语句删除学生表中年龄小于18岁的学生: DELETE FROM 学生表 WHERE 年龄 < 18; 请根据具体情况选择合适的SQL查询语句,并根据需要使用以上提到的语句的不同部分来构建完整的SQL查询语句

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值