SQL 的复习

一,sql的分类;

关联式资料库有:My sql ,Oracle,Posttgresql,SQL Sever

非关联式资料库: MogoDB ,redis,DynamoDB,Elaticsearch,

基本思想软件通过sql语言传送给sql管理系统,sql管理系统实现数据的增删改查,

二,MY sql的安装;

sql的安装包网址:https://dev.mysql.com/downloads/

image-zbor.png填写my sql 的管理员的密码,记住即可。

一直下一步就好。

进入输入预设的管理员密码即可,创建代码,也可自己创建一个连线点击小加号即可。

image-srof.png三,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. 资料库下创建表格
  1. 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.存入表格资料。

示例表格:

image-vmum.png

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 '英语';

五.模拟创建创建公司资料库

image-wzpy.pngWORKS-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';
--如下面结果图片

image-tujp.png

join链接表格
select *--所有属性
select 'emp_id','manager_id'--选取这两个属性链接
FROM 'employee'
JOIN 'branch'
ON 'emp_id' = 'manager_id';
--on为关键字连接的条件,横向链接;

image-xhgw.png

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

文章作者: 风华
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 达达的博客
精选教程 教程
喜欢就支持一下吧