FavoriteLoading
0

数据库基础之高级查询(数据库查询)

数据库基础之高级查询(数据库查询)

普通查询

Select 列1[,列2,……] from 表名; 取出对应列所有行的数据;

要项取出对应列几行数据那么要加条件;

select sName,sAge from Student where sAge=18

 

排序

默认情况下查询会按照表中主键升序来显示数据;可以改变

SELECT sid,sName,sAge FROM Student order by sid desc[asc]

默认为升序

多个列之间以逗号分割,优先级依次降低

SELECT sid,sName,sAge FROM Student order by sName,sAge desc

需要条件排序放在条件之后

SELECT sid,sName,sAge FROM Student where sAge>=18 order by sName,sAge desc

 

limit(限制)关键字

limit后面有2个整数关键字,类似于字符串截取,第一个开始记录的索引,第二个代表取的长度

Select * from Student limit 1,1

从第2条记录开始取1条记录

limit关键字优先级:条件>排序>limit

SELECT * FROM `student` where sAge>=18 order by sid desc limit 0,3

 

关键字搜索

查询姓名中包含“张三”所有记录行,

%代表任意个任意的字符,可以是没有

SELECT * FROM `student` WHERE sName like '%张三%'

_代表任意一个字符,不能是没有

SELECT * FROM `student` WHERE sName like '张_'

 

聚合查询

获取数值列的最大max、最小min、平均avg、求和sum、是否重复distinct、统计行数count等查询

Select max(sage),min(sage),avg(sage),sum(sage),distinct(sname),count(sid) from student;

TIPS:聚合查询不得和普通列一起使用,原因是聚合查询一般只有一个值,而普通可能有很多值,非要使用可以分组,普通列必须要放在group by 后!!!

select sname,max(sage) from student 该行错误。

 

分组查询

select sname,max(sage) from student group by sname

 

链接查询

内联

select student.*,sccode from student,studentcode where student.scid=studentcode.scid; (推荐

以上的语法标准的写法

select student.*,sccode from student

inner join

studentcode on student.scid=studentcode.scid

 

左外联

select student.*,sccode from studentcode

left join

student on

student.scid=studentcode.scid

 

右外联

SELECT student . * , sccode

FROM studentcode

RIGHT JOIN student ON student.scid = studentcode.scid

 

子查询

在原来查询的基础继续查询,一般情况下用小括号包含。例如作为临时表

select sid,sname as 姓名,sage,sccode from

(select student.*,studentcode.sccode from student,studentcode where

student.scid=studentcode.scid) as tempTable

还有用子查询作为条件(查询出来的结果只能有一列)

只有一个值

select * from student

where sage=

(select max(sage) from student)

如果有多个值,条件应用in,代表范围

select * from student where sage in

(select sage from student)

还可以有明确条件的写法

select * from student where sage in(19,18)

 

特例

连接查询

Select a+b from table1 –将表table1中查询的a列b列合并输出,也可以2张表合并一列输出

Select a from table1 uinon select b from table2

交叉查询

在链表查询的过程中,有2点需要注意

  • 有重复的列一定要指明属于哪张表
  • 链表条件不对,那么查询出来的数据就是 主键数据条数*外键表数据条件

 

完整的建库建表语句如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
DROP DATABASE IF EXISTS Test;
 
CREATE DATABASE Test DEFAULT CHARACTER SET utf8 COLLATE
 
 
 
utf8_bin;
 
USE Test;
 
CREATE TABLE StudentCode(
 
scID INT PRIMARY KEY AUTO_INCREMENT,
 
scCode VARCHAR(18) NOT NULL,
 
UNIQUE(scCode)
 
);
 
 
 
CREATE TABLE Student(
 
sid INT PRIMARY KEY AUTO_INCREMENT,
 
sName VARCHAR(16),
 
sAge INT DEFAULT 18,
 
sBalary NUMERIC(6,2) DEFAULT 0,
 
scID INT NOT NULL,
 
FOREIGN KEY(scID) REFERENCES StudentCode(scID),
 
UNIQUE(scID)
 
);
 
 
 
INSERT INTO StudentCode VALUES(NULL,'123');
 
INSERT INTO StudentCode VALUES(NULL,'456');
 
INSERT INTO StudentCode VALUES(NULL,'789');
 
INSERT INTO StudentCode(scid) VALUES(NULL);
 
INSERT INTO StudentCode VALUES(NULL,'abc');
 
INSERT INTO Student VALUES(NULL,'张三',DEFAULT,1,1);
 
INSERT INTO Student VALUES(NULL,'李四',19,0,2);
 
INSERT INTO Student(sid,sName,scID) VALUES(NULL,'王五',3);
欢迎分享本文,转载请保留出处!—重蔚自留地 站长邮箱:admin@cwhello.com