数据库(一)
相关概念
数据库:保存有组织的数据的容器
表:某种特定类型数据的结构化清单(名称唯一)
列:表中的一个字段
数据类型:限制列中的存储的数据
行:表中的一个记录
主键:一列(或一组列),其值能够唯一标识表中的每一行
- 任意两行都不具有相同的值
- 每一行都必须具有一个主键值(主键值不允许NULL值)
- 主键列中的值不允许修改或更新
- 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)
SQL(Structured Query Language)结构化查询语言
- 几乎所有DBMS(database manage system数据库管理系统)都支持SQL
- 简单易学
- 强有力的语言,可以进行复杂和高级的数据库操作
补充:创建数据库时,出现下图错误可以尝试在计算机管理中的服务启动Mysql服务
创建数据库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;
检索多个列 select xxx,xxx from xxx;
检索所有列 select * from xxx;
通配符:*
检索不同值的列 select distinct xxx from xxx;
限制结果 sql使用select top N xxx from xxx; MySQL使用select xxx from xxx limit N;
再加offset M; 表示从第M行开始起的N行数据
可简化为 limit N,M;
使用--注释
排序检索数据
子句:由一个关键字加上所提供的数据组成
order by排序
按多列排序
如图,现排性别,再排生日
如图,只按生日排
按列位置排序(很不好用)
需要确定order by后的数字是针对select里的位置,必须存在于select中
指定排序方向:+DESC,属于降序(Z-A)
ASC是升序,是默认的
order by xxx DESC, xxx DESC关键字只应用到直接位于其前面的列名
过滤数据
WHERE子句指定搜索条件(过滤条件)
若需要排序,需使order by位于where子句后面
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<>、!= | 不等于 |
< | 小于 |
<= | 小于等于 |
!< | 不小于 |
BETWEEN | 在指定值间 |
IS NULL | 为NULL值 |
eg:
高级数据过滤
使用AND和OR连接WHERE子句
AND和OR结合使用时,需注意AND优先级较高,在复杂情况下使用圆括号对操作符分组比较判断
eg:WHERE A OR B AND C; 这句话会先计算B and C,在和A进行OR运算
IN操作符:指定条件范围(其实类似于OR,使用IN更清楚直观,执行速度更快,且可以包含其他SELECT语句)
使用not
用通配符进行过滤
通配符:用来匹配值的一部分的特殊字符
搜索模式:由字面值、通配符或两者组合构成的搜索条件
通配符搜索只适用于文本字符串,非文本数据类型字段不能使用该法
LIKE操作符
% 任何字符出现任何次数
末尾匹配
中间匹配
_ 只匹配单个字符
[] 指定一个字符集,必须匹配指定位置的一个字符(Mysql不支持)
可用and or等替代,后面要接完整的条件语句,而不能和前面共用列名,或者其他字符;
eg:where s_birth like '%0' or '%1' 或者 where s_birth like '%0' or like '%1' 都是错误的