sql_的复习
SQL 的复习
一,sql的分类;
关联式资料库有:My sql ,Oracle,Posttgresql,SQL Sever
非关联式资料库: MogoDB ,redis,DynamoDB,Elaticsearch,
基本思想软件通过sql语言传送给sql管理系统,sql管理系统实现数据的增删改查,
二,MY sql的安装;
sql的安装包网址:https://dev.mysql.com/downloads/
填写my sql 的管理员的密码,记住即可。
一直下一步就好。
进入输入预设的管理员密码即可,创建代码,也可自己创建一个连线点击小加号即可。
三,sql的表格
sql的基本操作是对数据的存储多以表格形式,其中primary key为区分表格内相同属性的唯一预设id。
而为了实现表格之间的联系可以使用foreign_key来实现多者的联系,
四,sql的语法使用
1.在sql sever 中输入代码,选中需要运行的代码,点击上方黄色闪电即可运行,点击黄色闪电旁边的运行最近敲打的代码
CREATE DATABASE sql_tutorial;//create database 创建资料库 tutorial 关键字为 create database 加‘’消除关键字矛盾
SHOW DATABASES ;--展示所有的资料库 databases 加了s ‘表示所有 ’ ‘关键字为show’ databases
DROP DATABASE ;--删除资料库
USE 'SQL_TUTORIAL'; --关键字为USE,即为进入当前资料库,创建表格等,
2.sql_资料库的数据类型
int 为整型(即为整数)
DECIMAL (3,2),有小数点的数,函数第一位为数该数的位数为3位,2为小数点所占的位数,例如:3.22
VARCHAR(n) 用来存放字符串,其中n为需要传输的参数,其中n代表字符串的位数
BLOB 全拼为BINARY LARGE OBJECT, 用来传输二进制资料包括(图片,影片,档案等)
DATE 此资料形态是用来存放日期的---格式为 ‘yyyy-mm-dd’
TIMESTAMP --来记录时间的,--格式为yyyy-mm-dd hh:mm:ss
3. 资料库下创建表格
use ’资料库名称‘ 使用某个资料库创建表格相应的格式,以及数据类型,增删改查表格栏目
USE 'SQL_tutorial #进入资料库'
CREATE TABLE 'STUDENT' ( --创建名字为student的表格
'student_id int,--primary key, --添加一个表格属性,数据类型为整型的属性
'student_id INT AUTO_INCREMENT,AUTO_等可以表示自增一个id,可不用预设,直接存入其余属性即可,student_id 电脑可以自己设定值以自增的方式
'name' VARCHAR(20) NOT NULL, -- 限制该属性不能有NULL --添加一个name,字符串20位的一个表格属性
'major' VARCHAR(20) UNIQUE , -- 限制该属性即为 major 主修不能有重复 小黑小白不能同时学习一门课程
'major' VARCHAR(20) DEFAULT '历史',--如果存入时候没有加major属性时候,即默认存入major属性为历史。
PRIMARY KEY ('STUDENT_ID'), --可以与第一行关键字做替换
)
DESCRIBE 'STUDENT'; --查看,student表格
DROP TABLE 'student'; --删除名为student的表格
ALTER TABLE 'student' ADD gpa DECIMAL(3,2); --添加表格属性 alter,译为改变
ALTER TABLE 'student' DROP COLUMN gpa;--drop column 为关键字,译为删除表格中gpa栏,
2.1.建完资料库,2.创建表格,3.存入表格资料。
示例表格:
1.存入数据到表格 ,查看表格中的所有数据
set SQL_safe_UPDATES=0; --关闭sql更新
--values 关键字,英语翻译过来是 值
INSERT INTO 'student' VALUES(1,'小白','历史'); --往表格里面存入数据,无资料的可以填写NULL,表示无例如:1,小黑,NULL
SELECT * FROM 'student'; --*为全部的意思 select为选取的意思, *为全部的意思 全译为选取student表格的全部资料
INSERT INTO 'student'('name','major','student_id') VALUES('小蓝','英语','4'); --加括号改变输入的顺序,也可只存入'name','major'其中两项
2.替换表格中的栏目某一特定值为特定值,删除表格中特定的id
UPDATE 'student' --更新名为student的表格数据
SET 'major' = '英语文学' --更新表格中major栏为英语文学
WHERE 'major' = '英语' --条件为,major的植为英语
UPDATE 'student' --更新名为student的表格数据
SET 'major' = '生化' --更新表格中major栏为生化
WHERE 'major' = '生物' OR 'major' = '化学'; --条件为,major的值为生物和化学
UPDATE 'student' --更新名为student的表格数据
SET 'name' = '小会','major'='物理' --更新表格中name的属性,major主修改为物理,
WHERE 'student_id' = 1; --条件为student_id=1;
DELETE FROM 'student'
WHERE 'student_id' = 4; --删除表格中id为4的数据
DELETE FROM 'student'
WHERE 'student_id' = 4 AND 'major' = '物理'; --删除表格满足......
DELETE FROM 'student'
WHERE 'score' < 60; --删除小于60分的所有行所表示的数据
DELETE FROM 'student' --删除表格所有资料
3.查看表格所有资料,SELECT取得的意思
SELECT * FROM 'student';--取得student的所有属性表格。
SELECT 'name', 'major' FROM 'student'; --从student中取得 name 和major的属性
---------------------------
SELECT * FROM 'student' ORDER BY 'score'; --order by是排序的意思,即为根据分数做排序
---------------------
SELECT * FROM 'student'
ORDER BY 'score'; --由低到高排序
----------------------
SELECT * FROM 'student'
ORDER BY 'score' DESC; --由高到低排序
---------------------------
SELECT * FROM 'student'
ORDER BY 'score' 'student_id'; --根据score做排序,如果score一样再次根据studen_id做排序
--------------------------
SELECT *
FROM 'student'
--ORDER by 'score' --选取前三低的资料
LIMIT 3; --选取表中的前三笔资料
-------------
SELECT *
FROM 'student'
WHERE 'major' = '英语' and 'student_id=1'OR 'score'<>70;--分数不等于70;
SELECT *
FROM 'student'
WHERE 'major' IN('历史','英语','生物'); --查询major属性中有没有历史,英语,生物这三个属性
where 'major' = '历史' OR '生物' OR '英语';
五.模拟创建创建公司资料库
WORKS-WIth 可以是 primary_key (为一的区其他可能相同的属性)
foreign key --与其他表格相关联的属性
1.创建表格
CREATE TABLE `employee`(
`emp_id` INT PRIMARY KEY,
`name` VARCHAR(20),
`birth_date` DATE,
`sex` VARCHAR(1),
`salary` INT,
`branch_id` INT,
`sup_id` INT
); --每个表格中只能有一个primary_key,其 branch_id sup_id 应都为peimary_key
https://rh.sru.baidu.com/r/UT30t3MxwI?f=qf&u=33dbf598885d8963
peimary_key的参考解释。
CREATE TABLE `branch`(
`branch_id` INT PRIMARY KEY,
`branch_name` VARCHAR(20),
`manager_id` INT,--
FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
); foreign key 设为 manager_id -对应于references-, emloyee(emp_id),
--branch表格值对应于emp_id 表格值
添加forign table 属性
ALTER TABLE employee
ADD FOREIGN KEY(`branch_id`)
REFERENCES branch(`branch_id`)
ON DELETE SET NULL;
ALTER TABLE employee --给emloyee表格中sup_id赋予forrign key栏,对应于
ADD FOREIGN KEY(`sup_id`) --emp_id 栏目
REFERENCES employee(`emp_id`)
ON DELETE SET NULL;
CREATE TABLE `client`(
`client_id` INT PRIMARY KEY,
`client_name` VARCHAR(20),
`phone` VARCHAR(20)
);
CREATE TABLE `works_with`(
`emp_id` INT,
`client_id` INT,
`total_sales` INT,
PRIMARY KEY(`emp_id`, `client_id`),
FOREIGN KEY (`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,
FOREIGN KEY (`client_id`) REFERENCES `client`(`client_id`) ON DELETE CASCADE
);
2.存入数值
INSERT INTO 'employee' VALUES(206,'小黄','1998-10-08','f',50000,1,NULL);
--这样敲会导致错误,因为在employee表格中branch_id 对应于branch表,branch_id,其branch表格branch_id此时尚未存在
INSERT INTO `branch` VALUES(1, '研發', NULL);
INSERT INTO `branch` VALUES(2, '行政', NULL);
INSERT INTO `branch` VALUES(3, '資訊', NULL);
INSERT INTO `employee` VALUES(206, '小黃', '1998-10-08', 'F', 50000, 1, NULL);
INSERT INTO `employee` VALUES(207, '小綠', '1985-09-16', 'M', 29000, 2, 206);
INSERT INTO `employee` VALUES(208, '小黑', '2000-12-19', 'M', 35000, 3, 206);
INSERT INTO `employee` VALUES(209, '小白', '1997-01-22', 'F', 39000, 3, 207);
INSERT INTO `employee` VALUES(210, '小蘭', '1925-11-10', 'F', 84000, 1, 207);
UPDATE `branch`
SET `manager_id` = 206
WHERE `branch_id` = 1;
UPDATE `branch`
SET `manager_id` = 207
WHERE `branch_id` = 2;
UPDATE `branch`
SET `manager_id` = 208
WHERE `branch_id` = 3;
INSERT INTO `client` VALUES(400, '阿狗', '254354335');
INSERT INTO `client` VALUES(401, '阿貓', '25633899');
INSERT INTO `client` VALUES(402, '旺來', '45354345');
INSERT INTO `client` VALUES(403, '露西', '54354365');
INSERT INTO `client` VALUES(404, '艾瑞克', '18783783');
INSERT INTO `works_with` VALUES(206, 400, 70000);
INSERT INTO `works_with` VALUES(207, 401, 24000);
INSERT INTO `works_with` VALUES(208, 402, 9800);
INSERT INTO `works_with` VALUES(208, 403, 24000);
INSERT INTO `works_with` VALUES(210, 404, 87940);
--dinsit表示无重复
SElECT DISTINCT 'sex' FROM 'employee';
--选取员共性别无重复
六,计算函数
SELECT COUNT(*) FROM 'employee'; --取得 employee 的表格 的总笔数
SELECT COUNT(sup_id) FROM 'employee'; --取得sup_id的笔数
select COunt(*) FROM 'employee'
WHERE 'birth_date' > '1970-01-01' and 'sex' = 'f';
--取得1970年后出生的员工
SELECT AVG('salary') FROM 'employee';--取得员工的平均薪水
SELECT sum('alary') FROM 'employee'--取得员工薪水的综合
SELECT MAX('salary') FROM 'employee' --取得员工薪水的综合
-- MIN 薪水最低
SELECT *
FROM 'client'
WHERE 'phone' LIKE '%335'; --%代表子元,即为前面无论有多少数都可以,但尾数需要时335
'254%' --开头是254
'%354%' --选取中间是354的号码
SELECT *
FROM 'client'
WHERE 'phone' LIKE '哎%' --取得姓艾的人
SELECT *
FROM 'employee' -- 写了五个下划线代表五个占位,其值可以为任意数,但是月份需为12,
WHERE 'birth_date' LIKE '____12%'
--取得生日在12月分的人的数据
七.特殊指令
--把搜寻的结果合并在一起
select 'name'
from 'employee'
union --合并选取结果关键字 ,不可以把两项和一项合并在一起,数据类型也要一样
select 'client_name'
from 'client';
--搜寻结果的及ID,
select 'emp_id' AS 'totsl_id','name' AS 'total_name' --AS表示把empid栏改为total_id
FROM 'employee'
union
select 'client','client_name'
FROM 'client';
--如下面结果图片
join链接表格
select *--所有属性
select 'emp_id','manager_id'--选取这两个属性链接
FROM 'employee'
JOIN 'branch'
ON 'emp_id' = 'manager_id';
--on为关键字连接的条件,横向链接;
1.关键字:创建表格create/drop table
2.修改表格alter 表 add/drop 列 属性
3.增加insert into 表格 values()、 更新update、删除delete from
4.primary key、foreign key() references 表格() on delete set null/on delete 5..6cascade
6.条件where,多个or用in()
7.查询资料select * from 表
8.分组查询group by 排序 order by 降序desc 限制limit 去掉重复值distinct
9.聚合函数 count、ave、max、min、
10.查询字符 模糊查询like、多个字符%、一个字符_
11.并集union、连接 表格 left/right join 表格on条件
12.子查询vlookup