SQL查询语言

1 简介:

SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。

2 SQL语句特点

不区分大小写

3 SQL的主要内容

主句:select、insert into、update 、delete

子句:where(and 和 or) 、order by 、group by 、limit、join...on

4 增删改查

4.1 添加数据

添加数据语法:

INSERT INTO 表名[( 字段名1,字段名2,... )] VALUES ('value1','value2',.... )
-- 如果value的值是字符串则必须加 引号
​
​
-- 添加数据:insert into 表名[(字段名1,字段名2...)]values('值1','值2'...)
-- insert into class(banhao,banji,teacher)values(6,'python开发','王老师')
-- 等价于上面的sql语句:
-- insert into class values(9,'python开发3','王老师')
​
-- insert into class(banji,teacher)values('go语言开发','李老师')

4.2 删除数据

删除数据语法:



DELETE FROM 表名 [WHERE 条件] 
-- 注意:不加条件全删除,很危险
​
-- 删除数据:delete from 表名 [where 条件]
-- 注意:如果省略了where条件时会把表中所有数据给删除掉,要慎重使用
-- 删除班号为7的班级数据:
-- delete from class where banhao=7
-- delete from students

4.3 更新数据

更新(修改)数据语法:

UPDATE 表名 SET column1 = value1,column2 = value2 ,... [WHERE 条件]
​
-- 更新数据:update 表名  set  要修改的字段名1='值',要修改的字段名2='值'...  [where 条件]
-- 注意:如果省略了where条件时会把表中所有数据给修改掉,要慎重使用
​
-- 修改班号为8的班级名称为web开发2班,班主任为张老师:
update class set banji='web开发2班',teacher='张老师' where banhao='8'
​

4.4 单表查询数据

单表查询数据的语法:

select */字段名/函数/字符串   from 表名  [where  条件   group by 字段名   order by 字段名  asc/desc  limit  m,n]
*: 代表所有的字段

group by :分组查询

4.5 其它子句

4.5.1 where 条件

运算符描述
=等于
!= 或者 <>不等于
>大于
<小于
>=大于等于
<=小于等于
[not] BETWEEN在某个范围内
[not] LIKE搜索某种模式
AND、OR交集、并集

语法:

主句 WHERE column = VALUE

主句 WHERE column  BETWEEN VALUE1 AND VALUE2  -- 两边的区间是包含的

主句 WHERE column LIKE 'a%'  -- 在某个列中查询以a为开头的数据 主句 WHERE column LIKE '%a' -- 在某个列中查询以a为开头的数据 主句 WHERE column LIKE '%a%' -- 在某个列中查询以a为开头的数据

-- 查询所有的学生信息:
-- select * from xsb 
​
-- 查询所有学生的姓名、年龄、所在系:
-- select '姓名为:',xm,age,'系名为:',szx from xsb
​
-- 查询学生个数:count(*/某个字段名)
-- as:起别名
-- select count(*)  from xsb 
-- select count(xh)  as m  from xsb 
​
-- 查询计算机系、数学系的学生姓名、年龄、所在系:
-- 或: or、||
-- select xm,age,szx from xsb where szx='计算机系' || szx='数学系'
-- select xm,age,szx from xsb where szx='计算机系' or szx='数学系'
-- in():在...里面
-- 等价于上面的sql:
-- select xm,age,szx from xsb where szx in('计算机系','数学系')
​
-- 查询成绩大于等于85并且小于等于95的成绩信息:
-- 且:and、&&
-- select * from cjb where cj>=85 and cj<=95
-- select * from cjb where cj>=85 && cj<=95
-- between...and:
-- 等价于上面的sql:
-- select * from cjb where cj between 85 and 95
-- select * from cjb where cj not between 85 and 95
​
-- 不等于:!=、<>
-- 查询不为计算机系的学生姓名、所在系:
-- select xm,szx from xsb where szx!='计算机系'
-- select xm,szx from xsb where szx<>'计算机系'
​
-- 模糊查询:like 
-- 通配符:%表示零个或n个任意字符    _表示任意一个字符
-- 查询姓王的学生姓名、性别、年龄:
-- select xm,age,sex from xsb where xm like '王%'
-- select xm,age,sex from xsb where xm like '王_'
-- 查询姓名中含有力的学生姓名、年龄:
-- select xm,age from xsb where xm like '%力%'
-- select xm,age from xsb where xm not like '%力%'

4.5.2 order by排序

语法:



主句 ORDER BY column [ ASC | DESC ]
    
-- ASC 升序  默认升序
-- DESC 倒序
​
-- order by :按某个字段排序
-- asc:升序,如果省略则默认为asc
-- desc:降序
​
-- 查询c01、c02这两门课程的成绩信息,并按成绩降序排序,只显示成绩最高的三个:
-- select * from cjb where kch='c01' || kch='c02'
-- select * from cjb where kch in('c01','c02') order by cj desc limit 3
​
-- 查询除c06外的每门课程的学习人数,并按学习人数降序排序:
-- select count(xh) as m ,kch from cjb where kch!='c06'  group by kch order by m desc 
​
-- 查询除表演系外的学生姓名、年龄、所在系,先按所在系升序排序,如果为同一个系则按年龄降序排序:
select xm,age,szx from xsb where szx<>'表演系' order by szx asc,age desc

4.5.3 group by分组查询、聚合查询

SELECT *[,聚合函数] FROM 表名 [GROUP BY 字段]

count(*): 总个数

min(字段名):最小值

max(字段名):最大值

avg(字段名):求平均值

sum(字段名) :求和(累加)

-- group by :分组查询
-- 查询男生、女生分别有多少人:
-- select count(*),sex from xsb group by sex
-- 查询除c06这门课程外的每门课程的总分数:
-- select sum(cj),kch from cjb where kch<>'c06' group by kch
-- 查询除表演系外的每个系的人数:
-- select count(*),szx from xsb where szx<>'表演系' group by szx
-- 查询学号不为9531102的每个学生的平均分数:
select avg(cj),xh from cjb where xh<>'9531102' group by xh
 

4.5.4 limit

SELECT * FROM 表名 [ LIMIT [start,]size ]

size:取几条

start: 下标,从哪几个位置开始取,默认的位置编号是从零

-- limit m,n:
-- m:位置编号、默认从零开始
-- n:要查询的个数/条数
-- 查询前三个学生信息:
-- select * from xsb limit 0,3
-- 等价于上面的sql:如果省略m的值,则默认从第一条记录开始查询
-- select * from xsb limit 3
​
-- select * from xsb limit 1,3
-- select * from xsb limit 3,5
​
-- limit m,n:通常用于实现分页
-- 计算总页数:总页数=向上取整(总记录个数/每页要显示的条数)
-- 计算游标位置:游标位置(m)=(第几页-1)*条数
​
-- 每页要显示4个学生,第一页要显示的学生信息:
-- select * from xsb limit 0,4
​
-- 每页要显示4个学生,第二页要显示的学生信息:
--  select * from xsb limit 4,4
​
-- 每页要显示4个学生,第三页要显示的学生信息:
 -- select * from xsb limit 8,4
​
-- order by :按某个字段排序
-- asc:升序,如果省略则默认为asc
-- desc:降序
​
-- 查询c01、c02这两门课程的成绩信息,并按成绩降序排序,只显示成绩最高的三个:
-- select * from cjb where kch='c01' || kch='c02'
-- select * from cjb where kch in('c01','c02') order by cj desc limit 3
​
-- 查询除c06外的每门课程的学习人数,并按学习人数降序排序:
-- select count(xh) as m ,kch from cjb where kch!='c06'  group by kch order by m desc 
​
-- 查询除表演系外的学生姓名、年龄、所在系,先按所在系升序排序,如果为同一个系则按年龄降序排序:
select xm,age,szx from xsb where szx<>'表演系' order by szx asc,age desc

4.5.5 join联表查询

联表查询的语法:

全联接inner join的特点:要关联的表必须满足on条件时才会出现在查询结果集中

在联接left join的特点:left join左边的表不管是否满足on条件都会出现在查询结果集中,left join右边的表满足on条件时在查询结果集中会有具体的数据,否则以null来显示

SELECT * FROM 表1 inner JOIN 表2 ON 连接条件 [where  条件   group by 字段名   order by 字段名  asc/desc  limit  m,n]   -- 全连接。 只有on后面的条件成立才会连接。
SELECT * FROM 表1 left join 表2 ON 连接条件 [where  条件   group by 字段名   order by 字段名  asc/desc  limit  m,n] -- 左连接  以左表为基准,左表的数据都会显示
​
​
-- 查询学生的学号、姓名、年龄、所在系、成绩:
-- 全联接inner join的特点:要关联的表必须满足on条件时才会出现在查询结果集中
-- select * from xsb as x inner join cjb  as c on x.xh=c.xh inner join kcb as k on c.kch=k.kch
​
-- 在联接left join的特点:left join左边的表不管是否满足on条件都会出现在查询结果集中,left join右边的表满足on
-- 条件时在查询结果集中会有具体的数据,否则以null来显示
select x.xh,xm,age,szx,cj from xsb as x left join cjb as c on x.xh=c.xh
-- 查询计算机系、数学的学生姓名、年龄、所在系、成绩、课程名,并按成绩降序排序,
select xm,age,szx,kcm,cj from xsb as x left join cjb as c on x.xh=c.xh left  join kcb as k on c.kch=k.kch
 where szx in('计算机系','数学系') order by cj desc

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL是结构化查询语言(Structured Query Language)的缩写,是一种用于管理关系型数据库的查询语言。下面是一些关于SQL查询语言的习题和答案: 1. 查询员工表中所有员工的信息。 答案:SELECT * FROM 员工表; 2. 查询员工表中薪水大于5000的员工姓名和薪水。 答案:SELECT 姓名, 薪水 FROM 员工表 WHERE 薪水 > 5000; 3. 查询订单表中最近一周的订单数量。 答案:SELECT COUNT(*) FROM 订单表 WHERE 下单日期 >= DATE_SUB(NOW(), INTERVAL 7 DAY); 4. 查询客户表中不在员工表中的客户姓名。 答案:SELECT 姓名 FROM 客户表 WHERE 姓名 NOT IN (SELECT 姓名 FROM 员工表); 5. 查询商品表中销售数最高的前5个商品。 答案:SELECT * FROM 商品表 ORDER BY 销售数 DESC LIMIT 5; 6. 查询订单表中每个客户的订单总数。 答案:SELECT 客户, COUNT(*) FROM 订单表 GROUP BY 客户; 7. 查询订单表中订单金额超过10000的客户姓名和订单金额。 答案:SELECT 客户, 订单金额 FROM 订单表 WHERE 订单金额 > 10000; 8. 查询员工表中每个部门的员工人数。 答案:SELECT 部门, COUNT(*) FROM 员工表 GROUP BY 部门; 9. 查询订单表中订单日期是周末的订单数量。 答案:SELECT COUNT(*) FROM 订单表 WHERE WEEKDAY(下单日期) >= 5; 10. 查询客户表中姓“张”的客户数量。 答案:SELECT COUNT(*) FROM 客户表 WHERE 姓名 LIKE '张%'; 以上是一些关于SQL查询语言的习题和答案,希望对您有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沁沁酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值