数据库基础知识(笔记不区分大小写和英文中文符号)

一、最基本的select查询语句

select 字段1,字段2,......from 表名;

select * from  表名;//*号代表所有字段
 查询xsda表中所有女生的记录
select * from xsda where 性别='女';
 查询xscj表中的学号,姓名,计算机三项信息,结果按计算机成绩的降序排列
select 学号,姓名,计算机
from xscj order by 计算机 desc;
-- order by 排序  desc降序

二、列的别名(as)

列别名只能在order by 中使用

例如:select sname as 书名 from book;

as可省略。

列的别名还可以用双引号“ ”,当别名中间用空格时使用。(不要使用单引号)

三、去除重复行(distinct)

例如:select distinct sname from book;

(去除重复行只能去除一个,意思就是只能查询一个,
不能和其他查询的字段一起,会出错 
例如:select sname,distinct cno from book;)

四、空值参与计算(null)

SELECT 字段名称
FROM 表名
WHERE 字段名称 IS (not)NULL;

null不等同于0。

空值参与运算,结果一定为空

ifnull(参数1,参数2)  数据为null时用参数2,否则用参数1。

五、着重号

当语句中字段名或者表名等出现关键字时给关键字加着重号

例如:select * from `order`;

六、显示表结构

desc (describe)表名;(显示表中字段的详细信息)

七、where子句

where 字句后面的条件不能用列别名

where字句(声明在from字句后面)

例如:select * from book where sname=‘计算机基础’;(字符串用单引号括起来)

选取所有价格大于30的产品(>)

SELECT * FROM Products
WHERE Price > 30;

八、插入(insert into)

1- 指定要插入的列名和值:

INSERT INTO table_name (字段名称1, 字段名称2, ...)
VALUES (value1, value2, value3, ...);

2-为表的所有列添加值 

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

将查询结果插入到另一个表里面:

insert into 目标表
(目标字段1,......)
select
(来源表字段1,......)
from 来源表
[where条件];

九、更新(update)

UPDATE 表名
SET 字段名称1 = value1, 字段名称2= value2, ...
WHERE 条件;

十、删除(delete)

DELETE FROM 表名 WHERE 条件;

从多个表删除:

delete 表名1,表名2......from 表名1,表名2,......
[where条件];
或
delete from 表名1,表名2...... using 表名1,表名2,......
[where条件];

十一、聚合函数

count——max——min——sum——avg

SELECT 聚合函数(   )
FROM 表名;
//聚合函数不能和where一起使用,聚合函数有条件时使用having

十二、替换查询结果数据(case)

case 
    when 条件1 then 表达式1
    when 条件2 then 表达式2
    ......
    eles 表达式n
end
from 表名;

十三、运算符

(一)算术运算符(+  -  *  /  div  %   mod)

除法运算时,若分母为0,结果为null

% mod  运算时,结果的符号和%前一个数,也就是被模数符号相同

例如:12%-5=2     -12%5=-2

(二)比较运算符

1.=  <=  <=>  >=  !=  <    >     <>

= 符号只要有null参与比较,结果就为null

2.is null /is not null/isnull( )

例如:select * from book where sname is null;

或者

select * from book where isnull(sname); 

3.between  条件1 and  条件2

查询条件1到条件2范围的数据,包含边界

条件1是下限,条件2是上限

4.in/not  in

例如:select * from book where sname in(‘计算机基础’,‘MySQL数据库’);

满足二者其一即可

5.like  模糊查询

查询姓李的同学

例如:select * from xscj where name like‘李%’;

%       0个或者多个不确定字符

_(下划线)一个不确定字符

当查询的字符里面包含%或者_(下划线)

使用转义字符:\    

例如:select * from xscj where name like‘_\_静’;

\符号后面的下划线只是单纯的下划线

或者

使用转义字符:escape

例如:select * from xscj where name like‘_$_静’ escape ‘$’;

escape指定转义符为$,$后面的下划线只是单纯的下划线。

(三)逻辑运算符

1.逻辑非(not/!)

2.逻辑与(and/&&)

3.逻辑或(or/||)

4.逻辑异或(xor)

and 和 or可以一起使用 但是and优先级高于or

十四、排序、分类与分页

(一)排序(order by)

如果没有使用排序操作,默认查询返回数据是按照添加数据的顺序显示

例如:按照成绩grade降序排序

select * from xscj order by grade desc;

升序 asc     降序desc   默认为升序

(可以使用列别名进行排序)

(where声明在from之后,order by 之前)

(二)分页(limit)

limit 偏移量,显示的条目数

例如:limit 0,15  从第1条开始,显示15条

公式:

limit (偏移量—1) * 显示条目数,显示条目数

where,order by ,limit声明顺序:

xacj表中成绩大于九十分的

select * from xscj where grade>‘90’

按照成绩降序排序

order by grade desc

显示出前三个

limit 3;

(三)分类(group by)

语法格式:
SELECT 字段名称1, 字段名称2, ...
FROM table_name
ORDER BY 字段名称1, 字段名称2, ... ASC|DESC;
//desc降序
//asc升序
//默认升序

十五、多表查询(重点)

(一)多表查询的正确方式(需要有连接条件)

例如:select xscj.sno,xs.name,xscj.grade

from xscj,xs

where xscj.sno=xs.sno;

1.如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表(例如:xscj.sno)。

2.从SQL优化的角度,建议多表连接时,每个字段前都指明其所在的表。

3.可以给表起别名,在select,where中使用表的别名。

例如:select a.sno,b.name,a.grade

from xscj as a,xs as b

where a.sno=b.sno;

如果给表起了别名,一旦在select或者where中使用表名的话,必须使用取的别名,不能再使用表的原名。

当涉及到一个表,需要自己和自己连接时,必须用别名。

4.如果有n个表实现多表查询,至少需要有(n-1)个连接条件。

(三)等值连接 VS 非等值连接

非等值连接举例:

6b0989ce20744896a8fb2046ac9da73c.jpg

 等值连接:

上面第(二)大点举的例子都是等值连接(等值连接顾名思义就是用=连接起来,非等值连接就是用除了=以外的符号连接起来)。

select 表名1.列名1,表名1.列名2......表名2.列名1.....
from 表名1,表名2
where 表名1.列名=表名2.列名;

(四)自连接 VS 非自连接

一个表自己和自己连接(自连接)

f0aa88997d474b53b218eb8687a42f9f.jpg

不同的表连接(非自连接)

例如:select xscj.sno,xs.name,xscj.grade

from xscj,xs

where xscj.sno=xs.sno;

(xscj表和xs表的连接)

(五)内连接 VS 外连接

1.内连接:合并具有同一列的两个以上表的行,结果集中不包含一个表和另一个表不匹配的行。(例如求交集)

2.外连接(题目关键字,题目有所有两个字,信息又来自不同的表):合并同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行以外,还查询到了左表(左外连接)或者右表(右外连接)中不匹配的行。(相当于并集)

(1)左外连接(left join):左表为主+交集部分

例如:select xscj.sno,xs.name,xscj.grade

from xscj left join xs

on xscj.sno=xs.sno;

(2)右外连接(right join):右表为主+交集部分

例如:select xscj.sno,xs.name,xscj.grade

from xscj right join xs

on xscj.sno=xs.sno;

(3)满外连接([inner] join):并集部分

A.例如:select xscj.sno,xs.name,xscj.grade

from xscj join xs

on xscj.sno=xs.sno;

B.union关键字的使用:

语法格式:select 字段名称,....from table1

                     union[all]

                     select  字段名称,.....from table2

union关键字返回两个查询结果集的并集,去除重复部分。

union all :返回两个查询结果的并集,对于重复部分,不去除。

(题目没有要求去除重复结果时 )

C.其中join的实现

c07853fc9f2444ed9e4e1201bd3aa8e8.jpg

中图:内连接

左上图:左外连接

右上图:右外连接

左中图:在左上图的基础上要null的部分

右中图:在右上图的基础上要null的部分

左下图:满外连接(如:左上图 union all 右中图)

右下图:(左中图 union all 右中图)

D.using连接

例如:select xscj.sno,xs.name,xscj.grade

from xscj join xs

using (sno);

括号中填要指定的同名字段。

十六、子查询(难点+重点)

子查询:一个查询语句嵌套了另一个查询语句。子查询要包含在一个括号里面,放在语句的右侧。

(一)单行子查询 

单行子查询:内查询返回一个数据给外查询使用。(操作符:=  >  >=  <   <=   <>)

 例如:select *from  xscj where sno =(select sno from xs where name=‘张三’);

(二)多行子查询

多行子查询:内查询返回多行数据给外查询使用。

操作符:

1.in:等于列表中的任意一个。

例如:select employee_id,last_name

from employees

where salary in

               (select min(salary) from employees group by department_id);

2.any:和单行操作符一起使用,和子查询返回得某一个值比较。

例如:

009a1ac6b3e048a0b51daa88e23c96b6.jpg

3.all:和单行操作符一起使用,和子查询返回的所有值比较。

例如:

5333e5a0f2514a70a41aea2a7f9fafd1.jpg

4.some:any的别名,作用相同,一般使用any。

(三)exists子查询

测试子查询结果是否为空表,若为空,返回false,否则返回true
语法
SELECT 字段名
FROM 表名
WHERE EXISTS
(SELECT 字段名 FROM 表名 WHERE条件);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值