You辉编程_MySQL基础

第一节 数据库的概述
1.常用的关系型数据库
1.1MySql:开源免费
1.2Oracle:大型系统(银行系统,ERP系统,医院系统等,Java体系)
1.3sql server:基于Windows server 服务器中使用,c# .net体系
1.4存储方式:以表的方式
第二节 常用数据库命令 
1.定义数据库
1.1链接数据库:mysql -u root -p
1.2查看数据库:show databasees
1.3创建数据库:create database dbname
1.4切换数据库:use dbname(进入此数据库)
1.5查看所有表:show tables
1.6修改数据库:alter database dbname character set utf8
1.7删除数据库:drop database dbname
2.常用数据类型
int:整型
double:浮点型,double(6,3),最长长度时6位,小数点后3位,999.999
char:固定长度字符串类型,char(10),不足10位不足10位,例如身份证
varchar:可变长裤字符串,char(10),不足10位不会不足,性能低于char,例如个性签名
text:字符串,适用于大文件内容,例如博客内容
data:日期类型yyy-MM-dd
3.关于表常用命令
3.1创建表:create table tbname(id int,name varchar(20),sex char(1));
3.2查看表信息:desc tbnam
3.3查询表数据:select*from tbname
3.4插入数据:insert into tbname students(id,naem,sex) values(1,'小明',0);
3.5修改数据:update tbname set name = ‘小明’,age=3 where id=3;
3.6删除数据:delete from tbname where id = 3;
3.7修改表:alter table tbname add achievement double(5,2);
3.8修改表:alter table tbname change name uername varchar(20);
3.9修改表:alter table tbname drop name;
4.0删除表:drop table tbname;
4.1实例:
--查询表中的数据
SELECT * FROM students;
--添加数据
INSERT INTO students VALUES(2,'xiaoqiang',0);
--修改数据
UPDATE students SET sex = 1 WHERE id=2;
--删除数据
DELETE FROM students WHERE id=2;
--修改表,添加字段(列)
ALTER TABLE students ADD achievement DOUBLE(5,2);
--修改表,改变字段名称
ALTER TABLE students CHANGE NAME student_name VARCHAR(20);
--修改表,删除字段
ALTER TABLE students DROP achievement;
--产看表的字段
DESC students;
--删除表
DROP TABLE students;
3.SQL的分类
3.1DDL(data definition language):数据库定义语言,用来操作数据库对象:库表列邓。
create,alter,drop;用于数据库创建;
3.2DML(data manipulation language):数据库操作语言,用来增删查改数据库中的数据。
insert,update,delete;用于系统运行阶段
DQL(data query language):数据库语言查询,用来查询数据库中的数据;
select
第三节 查询语句
--初始化数据库(新建段名(列名))
CREATE TABLE students(
    id INT,
    students_name VARCHAR(20),
    sex CHAR(1),
    age INT,
    achievement DOUBLE(5,2),
    team_id INT,
    graduation_data DATE
);
--插入数据(往往列名插入对应的数据)
INSERT INTO students VALUES(1,'XiaoMing',0,7,100,1,'2021-7-1');
INSERT INTO students VALUES(2,'XiaoHong',1,8,199,1,'2021-7-1');
INSERT INTO students VALUES(3,'XiaoLiang',0,15,60,2,'2021-7-1');
INSERT INTO students VALUES(4,'XiaoMing',0,18,88,1,'2021-7-1');
INSERT INTO students VALUES(5,'XiaoZhang',1,2,110.5,3,'2021-7-1');
INSERT INTO students VALUES(6,'XiaoLi',0,6,30,3,'2021-7-1');
INSERT INTO students VALUES(7,'XiaoLiu',0,3,NULL,4,'2021-7-1');
INSERT INTO students VALUES(8,'XiaoSan',0,6,50,4,'2021-7-1');
INSERT INTO students VALUES(9,'XiaoWu',0,6,40,4,'2021-7-1');
INSERT INTO students VALUES(10,'XiaoEr',0,6,40,NULL,'2021-7-1');

--常用查询
SELECT * FROM students;
--按字段查(前三列数据)
SELECT id,students_name,sex FROM students;
--查询18年后的年龄as用来命名
SELECT students_name,age AS '18年以后' FROM students;
--按条件查询where
SELECT students_name,age FROM students WHERE id = 1;
SELECT students_name,age FROM students WHERE age>3 AND age<15;
--不等于用<>表示
SELECT students_name,age FROM students WHERE age<>6;
SELECT students_name,age FROM students WHERE age BETWEEN 3 AND 15;
--判断是否为Null
SELECT students_name,age,achievement FROM students WHERE achievement IS NULL;
SELECT students_name,age FROM students WHERE age=3 OR age=15;
--in(3,18)可以代替上面的或
SELECT students_name,age FROM students WHERE age IN(3,15);
--模糊查找以什么开头结尾……
--以什么开头用 什么+% ;包含用  %什么%;
SELECT students_name,age FROM students WHERE students_name LIKE 'X%';

/**按成绩排序 order by(默认升序)加ase效果一样*/
SELECT students_name,achievement FROM students ORDER BY achievement;
/**按降序排:在升序的基础上加 desc即可*/
SELECT students_name,achievement FROM students ORDER BY achievement DESC;
SELECT students_name,achievement FROM students WHERE achievement>=60 ORDER BY achievement DESC;
/*按两个字段排序*/
SELECT students_name,age,achievement FROM students ORDER BY age,achievement DESC;
第四节 常用函数
/*lower:转换为小写字母*/
SELECT students_name,LOWER(students_name) FROM students;
/*upper:转换为大写字母*/
SELECT students_name,UPPER(students_name) FROM students;
/*substr:从第几个字母截取:从第5个截取,截取2个字母*/
SELECT students_name,SUBSTR(students_name,5,2) FROM students;
/*从第5个截取,截取2个字母并且时字母L*/
SELECT students_name FROM students WHERE SUBSTR(students_name,5,1)='L';
/*length:获取长都:获取学生姓名的长度*/
SELECT students_name,LENGTH(students_name) FROM students;
/*ifnull:如果时Null直接转换为0*/
SELECT students_name,IFNULL(achievement,0)FROM students;

/**聚合函数*/

/*sum:求和:将所有成绩求和*/
SELECT SUM(achievement) FROM students;
/*avg:求平均数*/
SELECT AVG(achievement) FROM students;
/*max:求最大值:求最大年龄*/
SELECT MAX(age) FROM students;
/*min:求最小值:求最小年龄*/
SELECT MIN(age) FROM students;
/*count(*):查询有多少数据*/
SELECT COUNT(*) FROM students;
/*查询成绩数量*/
SELECT COUNT(achievement) FROM students;
/*加条件*/
/*distinct:去除重复数据*/
SELECT DISTINCT students_name FROM students;
/*一共有多少重复的有多少*/
SELECT COUNT(DISTINCT students_name) FROM students;
/*统计性别有多少,然后按性别进行分组(group by)*/
SELECT sex,COUNT(*) FROM students GROUP BY sex;
/*=============================================*/
SELECT team_id,SUM(achievement) FROM students GROUP BY team_id;
/*having:进行筛选:总成绩大于100的小组*/
/**where:直接对数据条的筛选,一般放在表名后
having:对组进行筛选,一般放在group by 之后

select语句:
select
xxxxx
from
xxxxx
where
xxxxx
group by
xxxxx
having
xxxxx
roder by
xxxxx
limit
*/

/*limit关键字*/

/*只查询5条数据*/
SELECT * FROM students LIMIT 5;
/*从第三条开始展示5条数据limit2,5*/
SELECT * FROM students LIMIT 2,5;
/*查询前5名成绩,显示5条数据*/
SELECT * FROM students ORDER BY achievement DESC LIMIT 5;

SELECT
team_id,SUM(achievement)
FROM
students
WHERE
sex = 0

GROUP BY
team_id
HAVING
SUM(achievement)>30
ORDER BY
SUM(achievement)DESC
LIMIT 2;
第五节 约束与表的关系
1.非空约束:保证字段的值不能为空
team_name varchar(20) not null
示例:
CREATE TABLE teams(
    id INT,
    team_name VARCHAR(20) NOT NULL
)
/*插入数据*/
INSERT INTO teams(id,team_name) VALUES (1,'老鹰队');
/*设置非空约束条件,如果在插入数据的时候为空值则会报错*/
INSERT INTO teams(id) VALUES(2);
SELECT * FROM teams;
DROP TABLE teams;
2.默认约束
保证字段即使字段不插入数据,也会有一个默认值;
team_name varchar(20) default '无名对'
示例:
CREATE TABLE teams(
    id INT,
    team_name VARCHAR(20) DEFAULT '无名队'
)
/*插入数据*/
INSERT INTO teams(id,team_name) VALUES (1,'老鹰队');
/*设置非空约束条件,如果在插入数据的时候为空值则会报错*/
INSERT INTO teams(id) VALUES(2);
SELECT * FROM teams;
DROP TABLE teams;
3.主键约束
保证数据不为空,且唯一(不允许重复且不能为空)
id int primary key (此时id变成了一个主键,一旦id为1就会报错)
auto_increment:有一种情况,id一旦设置为主键,当数据量足够大的时候,如果记不清id值,
如果插入的数据不接着之前的id值就会报错,auto_increment(自增字段),可以解决这个问题。
示例:
CREATE TABLE teams(
    id INT PRIMARY KEY AUTO_INCREMENT,
    team_name VARCHAR(20) 
)
/*插入数据*/
INSERT INTO teams(id,team_name) VALUES ('老鹰队');
INSERT INTO teams(id,team_name) VALUES ('老虎对');
/*设置非空约束条件,如果在插入数据的时候为空值则会报错*/
INSERT INTO teams(id) VALUES(2);
SELECT * FROM teams;
DROP TABLE teams;
3.外键约束
限制两个表的关系,一个表的外键必须为另一个的主键,可以为空。
foreign key(team_id) references teams(id) --定义一对多关系
注:一个表的外键必须对应另一个表的主键(team_id:2(此处不能为3)====id:2)
表一:
CREATE TABLE students(
    id INT,
    students_name VARCHAR(20),
    sex CHAR(1),
    age INT,
    achievement DOUBLE(5,2),
    team_id INT,
    graduation_data DATE,
    /*定义一个外键使之与teams表产生关系此时team_id成为一个外键*/
    FOREIGN KEY (team_id) REFERENCES teams(id)
);
只能插入
INSERT INTO students VALUES(1,'XiaoMing',0,7,100,1,'2021-7-1');
INSERT INTO students VALUES(2,'XiaoHong',1,8,199,1,'2021-7-1');

表二:
CREATE TABLE teams(
    id INT PRIMARY KEY AUTO_INCREMENT,
    team_name VARCHAR(20) 
)
/*插入数据*/
INSERT INTO teams(id,team_name) VALUES (1,'老鹰队');
INSERT INTO teams(id,team_name) VALUES (2,'老虎对');
/*设置非空约束条件,如果在插入数据的时候为空值则会报错*/
INSERT INTO teams(id) VALUES(2);
SELECT * FROM teams;
SELECT * FROM students;
DESC students;
DROP TABLE teams;
DROP TABLE students;

4.表关系分类
4.1一对多关系
一个小组对应多个学生;一个学生只能在一个小组
主键
数据的唯一字段,不能重复
外键
对应另一个表单的主键
对建立一对多关系
创建数据表,查询
【在实际项目开发中,可以考虑使用服务器端语言控制一对多关系,不必使用主外键控制】
4.2多对多关系
一个学生选择多个老师的课程,一个老师教多个学生;
创建学生表和教师表
create table teachers(
    id int primary key auto_increment,
    foreign key(teacher_id) references teachers(id),
    foreign key(student_id) references students(id)
)
插入数据
insert into teacher_to_student (teacher_id,student_id) values(1,2);
示例:
CREATE TABLE teachers(
    id INT PRIMARY KEY AUTO_INCREMENT,
    teacher_name VARCHAR(20)
)
SELECT * FROM teachers;
SELECT * FROM students;
/*插入两个老师*/
INSERT INTO teachers(teacher_name) VALUES ('李老师');
INSERT INTO teachers(teacher_name) VALUES ('张老师');

/*创建关联表*/
CREATE TABLE teacher_to_student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    teacher_id INT,
    student_id INT,
    FOREIGN KEY(teacher_id) REFERENCES teachers(id),
    FOREIGN KEY(student_id) REFERENCES students(id)
)
SELECT * FROM teacher_to_student;
INSERT INTO teacher_to_student(teacher_id,student_id) VALUES (1,1);
4.3一对一关系
并不常见,因为大部分一对一关系的数据都放在一个表中储存;
可能情况:隔离表的与部分数据,为了隐藏或是作为临时数据定期清空。
第六节 查询扩展
1.多表查询
/*通过对应关系查询*/
/*不推荐用这种方法*/
SELECT s.`students_name`,t.`team_name`
FROM students s,teams t WHERE s.`team_id` = t.`id`;
2.链接查询的分类
2.1内链接(展示公共部分):获取两个表交集的所有内容
/*内链接*/
SELECT s.`students_name`,t.`team_name`
FROM students s
INNER JOIN teams t
ON s.`team_id` = t.`id`;

2.2左外连接:左表全部+右表对应的内容
/*左外链接*/
SELECT s.`students_name`,t.`team_name`
FROM students s
LEFT JOIN teams t
ON s.`team_id` = t.`id`;

2.3右外链接:右表全部+左表部分内容
/*右外链接*/
SELECT s.`students_name`,t.`team_name`
FROM students s
RIGHT JOIN teams t
ON s.`team_id` = t.`id`;

SELECT * FROM teacher_to_student;
2.3三个表的查询
/*三个表的关联  teacher_to_student的别名:ts*/
SELECT s.`students_name`,t.`teacher_name` FROM teacher_to_student ts
INNER JOIN teachers t ON ts.`teacher_id`=t.`id`
INNER JOIN students s ON ts.`student_id`=s.`id`

2.4子查询

基于Navicat的数据库
1.MySql登录和基本命令
--“命令行”连接Mysql数据库:
-打开cmd
-输入: mysql -h localhost -P 3306 -uroot -p+密码
-show databases;//展示所有的具体数据库
-use <数据名>;//使用具体的数据库
-show tables;//显示所有的表


--命令行导出、导入数据
-在终端使用
-导出是:mysqldump
-导入是:mysql

2.表的主键ID
--表的主键:表示唯一的数据,必须不能重复不能为空,比如 学号、订单号等等;
--一般用 primary key 表示主键,通过Navicat来设置;
--一个表可以有多个主键,主键其实是一种索引;
--一般在业务开发过程中,可以通过主键获取唯一的一条数据,比如根据想学号获取唯一的一个学生;

3.表的索引 index
索引类似于书的目录,可以更快的找到对应的具体数据;
--索引的查询速度很快,
但是更新数据的时候,同时需要更新索引,所以在插入、修改数据的时候,效率稍有下降;
--索引类型:
Normal:为了解决查询速度,可以更快;
Unique:比如主键索引就是Unique,表示数据是唯一的;
Full Text,全文索引,一般用于 varchar、text的类型,尽量少用;

4.表的外键
对于两个表而言,如果他们建立了关联,我们通过外键来实现;
外键所在的表就是从表(子表),外键引用了另一个表的字段,被引用字段所在的表就是主表(父表);
外键充当的是两个字段之间的桥梁。从而建立联系,让两张表有了约束;

我们可以通过“课程表classify字段”和“课程分类表的code字段”进行关联,表示某个课程一定要在某个分类下;
一旦建立的关系,就是强制约束,如果我们想修改、删除主表数据,对于从表的外键来说,这个约束就发挥了作用了;

主表和从表(子表)的关系又分为:
1:1
1:N
N:1
N:N
比如:
学生和家庭是1:1
老师和学生是1:N
学生和老师是N:1
学生和课程是N:N

--外键的类型
-restrict:拒绝删除或更新父表;
-no action:innoDB拒绝删除或更新父表;
cascade:从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行;
on delete canscade 和 on update canscade都被InnoDB所支持;

-set null:从父表中删除或更新对应的行,同时将子表中的外键列设为空;
注意,这些在外键列没有被设为not null 时才有效;

5.SQL介绍
SQL是用于定义数据库结构以及管理其中数据的一种编程语言;
只要是访问关系型数据库,必然要用到SQL,而且对于不同的数据库,SQL的语法基本一样(Mysql,Oracle,SqlServer)
--SQL又分两类DDL和DML
DDL:数据模式定义语言DDL(Data Definition Language),是用于数据库(结构)操作;
比如创建数据库、删除数据库;创建表、修改表、删除表等;
DML:数据库操作语言(Data Manipulation Language,DML),主要是数据的操作;
比如查询数据、修改数据、删除数据;
比如函数操作数据、导入、导出数据等;

6.使用SQL创建数据库、查看数据库、删除数据库
##语法
create database <数据库名>;
show databases;--展示数据库
drop database <数据库名>;--删除数据库
use <数据库名>;
show tables;--查看有几张表
select * from <表名>;--查看表的内容
create database <库名> default character set utf8 collate utf8_general_ci;--设置编码格式和规则;

7.SQL创建表

- 1.一般我们通过客户端创建表,通过SQL预览,看创建表的语句;
- 2.创建表语句 用 ; 结束
- 3.每一列用 , 结尾
## 语法
CREATE TABLE <table_name> (
    <column_name> type(length) [NOT NULL] [DEFAULT default_value] [COMMENT '列注释'],
) [ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='表注释'];

##实例:
CREATE TABLE `classify` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '名称',
  `code` varchar(50) NOT NULL DEFAULT '',
  `parent_code` varchar(50) NOT NULL DEFAULT '0' COMMENT '父级别code',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
  `createAt` datetime DEFAULT NULL,
  `updateAt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8 COMMENT='课程类别表';

8.SQL修改表
一般,我们也尽量使用 Navicat 工具进行修改,然后通过SQL预览拿到可以执行的SQL

## 语法:
-- 修改表名
RENAME TABLE <table_name> TO <new_table_name>

-- 添加字段
ALTER TABLE <table_name> ADD COLUMN <field_name> type(length) [NOT NULL DEFAULT value COMMENT ''];

-- 修改字段类型
ALTER TABLE <table_name> MODIFY COLUMN <field_name> <new_type>;

-- 修改老字段名为新字段名
ALTER TABLE <table_name> CHANGE COLUMN <old_field_name> <new_field_name> type(length);

-- 删除字段
ALTER TABLE <table_name> DROP COLUMN <field_name>;

-- 删除表
DROP TABLE <table_name>;

## 代码实战
RENAME TABLE `myclassify` to `users`;

ALTER TABLE `users` ADD COLUMN `birthday` datetime;

ALTER TABLE `users` MODIFY COLUMN `birthday` VARCHAR(255);

ALTER TABLE `users` CHANGE COLUMN `birthday` `new_birthday` VARCHAR(255);

ALTER TABLE `users` DROP COLUMN `new_birthday`;

DROP TABLE `users`;

9.SQL删除表
drop table <table_name>;
truncate <table_name>;--清空表的数据

10.SQL创建索引
##语法
--创建普通索引
create index <index_name> on <table_name(column_name)>
--添加一个索引(指定类型)
alter table <table_name> add <index|unique> <index_name(column_name)>
--删除索引
drop index <index_name> on <table_name>;


10.SQL添加数据
## SQL 对表添加数据
对于数据的操作是DML语句,开发者最常用的语句:查询、添加、修改、删除

## 语法
INSERT INTO <table_name> 
(field-1, field-2,...,field-n)
VALUES
(value-1, value-2,...,value-n);

- 如果不写field,那么value必须和表的所有字段对应上

- field和value的个数必须相同
- field的类型和value的类型必须相同
- 如果id是自增的,可以不写,系统会自动填写
- value 可以用英文的 '' 包含 

## 示例代码:
insert into student
(realname,username,password,gender)
values
('zhansan','abc','ccc','1');

11.SQL修改数据
## SQL 修改数据库的表数据
一般配合 where子句 使用。where 就是满足条件的意思

## 语法
UPDATE <table_name> 
SET field-1 = value-1, field-2 = value-2
[WHERE Clause]

- 修改的时候要小心,一般都要到 where 子句,不然就是更新所有的数据;

## 代码实战
update student --修改这张表
set realname = '三妮' --哪个字段等于什么
where id = 11; --第是一个

update student
set realname = '三妮', username='sanni', gender='0', header='avatar'
where id = 11;

update student
set header = 'my-avatar'; --不加where会把全部的改成一样要注意

12.SQL删除数据
示例代码:
--删除一条数据
delete from student
where di = 1;
13.SQL查询数据
select * from student;--查询所有表
select realname,username,education  from student;--查询这几个字段
--通过自己起的别名来查询,显示的是对应的别名
select realname AS '真实姓名',username AS '登录名',education AS '学历' from AS t student where t.id=5;

13.SQL条件where子句
示例代码:
select * from student where id = 5 OR username ='zhaoli';
select * from student where gender = 1 and username = 'zhaoliu';
select * from student where status >= 0 and status <=1;
select * from student where status <> 2;

14.SQL模糊查询 like(类似于关键字搜索)
like 子句:在where子句中使用,表示模糊查询
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字段是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
示例代码:
select * from stuent where username like '%u';

15.SQL的排序语句 order by 子句(按照什么进行排序)
--按照某一列进行排序,在where子句的后面使用
--order by 后面的字段可以有多个,用','号隔开
--asc 表示表示升序
--desc 表示降序
--如果不写明 asc 或 desc 那么默认是升序

示例示例代码:
select * from student order by id desc;--按id降序排
select * from student order by username desc; --按字母降序排
select * from student order by status asc,id desc; --多个条件进行排序

16.SQL分页 limt
主要用于表中数据的分页,当一个表中数据量比较大的时候,我们一般采取数据可以参考书本中的也页码、一些网站上的功能;
(2,5):从2开始(从0开始),有5条数据
注:limit在where和order by 的后面
示例代码:
select * from student order by limit 0,3; --查前三条数据
select * from student order by limit 2,5;


17.SQL分组group by
示例代码:
select count(*) from course; --查询course表有机条数据
select calssify,count(*) from course --在classify中查找
where free = 1  --是否免费的课程,通过classify进行分组
group by classify
having count(*) > 4 
order by count(*) asc;

18.SQL连接查询、join查询
连接查询:用于表与表之间关系的查询
一般通过where子句通过两个有关系的字段进行关联查询数据(比如主键和外键);
返回的数据一定是有关系的数据,无关系的数据不会返回。

left join:用于表与表之间关系的查询,但是返回的数据包含左边表的冗余数据

right join:用于表与表之间关系的查询,但是返回的数据包含右边表的冗余数据

## 语法
-- 连接查询
SELECT t1.field, t2.field
FROM table1 [AS] t1 , table2 [AS] t2
WHERE t1.field1 = t2.field2

-- left join on 查询
SELECT t1.field, t2.field
FROM t1 left join t2 on t1.field1 = t2.field2

-- right join on查询
SELECT *
FROM t1 right join t2 on t1.field1 = t2.field2

1. 可以用 AS 使用别名,当然 AS 也可以省略
2. 不止是两个表,三个表、四个表也可以一起连接查询
3. left join 和 right join 可以配合 WHERE 一起使用


## 代码实战
SELECT t1.`code`, t1.`name`, t2.`name`, t2.classify
FROM classify t1 , course t2
WHERE t1.`code` = t2.classify

SELECT t1.`code`, t1.`name`, t2.`name`, t2.classify
FROM classify t1 LEFT JOIN course t2 ON t1.`code` = t2.classify;

SELECT t1.`code`, t1.`name`, t2.`name`, t2.classify
FROM classify t1 RIGHT JOIN course t2 ON t1.`code` = t2.classify
where t2.free = 1;
示例代码:
/*通过code 和 classify 两个字段进行关联*/
SELECT t1.code,t1.name,t2.name,t2.classify
from classify t1,course t2
where t1.`code` = t2.classify;

/*左关联,会有冗余数据*/ 
SELECT t1.`code`,t1.`name`,t2.`name`,t2.`classify`
from classify t1 LEFT JOIN course t2 ON t1.code = t2.classify;

/*右关联,会有冗余数据*/ 
SELECT t1.`code`,t1.`name`,t2.`name`,t2.`classify`
from classify t1 RIGHT JOIN course t2 ON t1.code = t2.classify;

19.SQL union和distinct关键字
union:将两张表或多张表的数据合并到一个列表中;
distinct:筛选掉重复的数据;
##理解
第一张表所查询的数据
union
第二张表所查询的数
注:两张表所查询的数据条数必须是一样的
示例代码:
select name,code from classify
UNION ALL
select realname,password from student

select DISTINCT classify from course;

20.SQL between 和 in 关键字是闭区间[]
示例代码:
select * from student
where id between 2 and 5;

/*取反*/
select * from student
where id between 2 and 5;

/*id是1或者6*/
select * from student
where id in(1,6);
--这里是select,对于update 和 delete是同样的用法

21.SQL函数和计算
函数:SQL中提供了有些内置函数,方便我们使用
计算:在SQL中也可以使用简单的计算,比如+,/等,但并不常用
##语法:
-count(field) //计算
-sum(field) //求和
-avg(field) //求平均值
-curdata() //当前日期
示例代码:
select count(id) from course;
select sum(price) from course;
select sum(price+100) from course;
select avg(price) from course;
select curdate() from course;
select name,price * 100 from course;
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值