数据库(一)

相关概念

数据库:保存有组织的数据的容器

表:某种特定类型数据的结构化清单(名称唯一)

列:表中的一个字段

数据类型:限制列中的存储的数据

行:表中的一个记录

主键:一列(或一组列),其值能够唯一标识表中的每一行

  • 任意两行都不具有相同的值
  • 每一行都必须具有一个主键值(主键值不允许NULL值)
  • 主键列中的值不允许修改或更新
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)

SQL(Structured Query Language)结构化查询语言

  • 几乎所有DBMS(database manage system数据库管理系统)都支持SQL
  • 简单易学
  • 强有力的语言,可以进行复杂和高级的数据库操作

补充:创建数据库时,出现下图错误可以尝试在计算机管理中的服务启动Mysql服务

image-20220118104537606.png

image-20220118104557723.png

创建数据库ex

CREATE DATABASE ex;
USE ex;
--建表
--学生表
CREATE TABLE `Student`(
    `s_id` VARCHAR(20),
    `s_name` VARCHAR(20) NOT NULL DEFAULT '',
    `s_birth` VARCHAR(20) NOT NULL DEFAULT '',
    `s_sex` VARCHAR(10) NOT NULL DEFAULT '',
    PRIMARY KEY(`s_id`)
);
--课程表
CREATE TABLE `Course`(
    `c_id`  VARCHAR(20),
    `c_name` VARCHAR(20) NOT NULL DEFAULT '',
    `t_id` VARCHAR(20) NOT NULL,
    PRIMARY KEY(`c_id`)
);
--教师表
CREATE TABLE `Teacher`(
    `t_id` VARCHAR(20),
    `t_name` VARCHAR(20) NOT NULL DEFAULT '',
    PRIMARY KEY(`t_id`)
);
--成绩表
CREATE TABLE `Score`(
    `s_id` VARCHAR(20),
    `c_id`  VARCHAR(20),
    `s_score` INT(3),
    PRIMARY KEY(`s_id`,`c_id`)
);
--插入学生表测试数据
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');
--课程表测试数据
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');

--教师表测试数据
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

--成绩表测试数据
insert into Score values('01' , '01' , 80);
insert into Score values('01' , '02' , 90);
insert into Score values('01' , '03' , 99);
insert into Score values('02' , '01' , 70);
insert into Score values('02' , '02' , 60);
insert into Score values('02' , '03' , 80);
insert into Score values('03' , '01' , 80);
insert into Score values('03' , '02' , 80);
insert into Score values('03' , '03' , 80);
insert into Score values('04' , '01' , 50);
insert into Score values('04' , '02' , 30);
insert into Score values('04' , '03' , 20);
insert into Score values('05' , '01' , 76);
insert into Score values('05' , '02' , 87);
insert into Score values('06' , '01' , 31);
insert into Score values('06' , '03' , 34);
insert into Score values('07' , '02' , 89);
insert into Score values('07' , '03' , 98);

检索数据

关键字:SQL组成部分的保留字,不能用作表或列的名字

检索单个列 select xxx from xxx;

image-20220118111334047.png

检索多个列 select xxx,xxx from xxx;

image-20220118111427452.png

检索所有列 select * from xxx;

image-20220118111723078.png

通配符:*

检索不同值的列 select distinct xxx from xxx;

image-20220118112022892.png

限制结果 sql使用select top N xxx from xxx; MySQL使用select xxx from xxx limit N;

image-20220118115915886.png

再加offset M; 表示从第M行开始起的N行数据

可简化为 limit N,M;

使用--注释

排序检索数据

image-20220118111723078.png

子句:由一个关键字加上所提供的数据组成

order by排序

image-20220118121127882.png

按多列排序

image-20220118121620221.png

如图,现排性别,再排生日

image-20220118121717301.png

如图,只按生日排

按列位置排序(很不好用)

需要确定order by后的数字是针对select里的位置,必须存在于select中

image-20220118122604820.png

image-20220118122627439.png

指定排序方向:+DESC,属于降序(Z-A)

image-20220118153809713.png

ASC是升序,是默认的

order by xxx DESC, xxx DESC关键字只应用到直接位于其前面的列名

过滤数据

WHERE子句指定搜索条件(过滤条件)

image-20220118154428020.png

若需要排序,需使order by位于where子句后面

where子句操作符

操作符说明
=等于
<>、!=不等于
<小于
<=小于等于
!<不小于
BETWEEN在指定值间
IS NULL为NULL值

image-20220118155728920.png

eg:

image-20220118155746751.png

image-20220118155821231.png

高级数据过滤

使用AND和OR连接WHERE子句

image-20220118174819923.png

image-20220118174859062.png

AND和OR结合使用时,需注意AND优先级较高,在复杂情况下使用圆括号对操作符分组比较判断

eg:WHERE A OR B AND C; 这句话会先计算B and C,在和A进行OR运算

IN操作符:指定条件范围(其实类似于OR,使用IN更清楚直观,执行速度更快,且可以包含其他SELECT语句)

image-20220118175311468.png

使用not

image-20220118211104442.png

用通配符进行过滤

通配符:用来匹配值的一部分的特殊字符

搜索模式:由字面值、通配符或两者组合构成的搜索条件

通配符搜索只适用于文本字符串,非文本数据类型字段不能使用该法

LIKE操作符

% 任何字符出现任何次数

末尾匹配

image-20220118215802042.png

中间匹配

image-20220118215931701.png

_ 只匹配单个字符

image-20220118220442008.png

image-20220118220452126.png

[] 指定一个字符集,必须匹配指定位置的一个字符(Mysql不支持)

可用and or等替代,后面要接完整的条件语句,而不能和前面共用列名,或者其他字符;

eg:where s_birth like '%0' or '%1' 或者 where s_birth like '%0' or like '%1' 都是错误的

最后修改:2022 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏