首页 > 数据库 >SQL学习

SQL学习

时间:2023-09-05 17:45:43浏览次数:58  
标签:branch 学习 client student SQL employee id name

SQL学习

通过设置foreign key(外键)和其他的表关联(不仅可以跟别的表关联,也可以和自己表上的字段关联)

primary key(主键)可以设置一个或多个防止数据重复。

sql语句

create DATABASE sql_tutorial;

创建数据库,数据库名用反引号包围可以防止和关键字冲突

show databases;

展示数据库

drop database database;

删除数据库

use sql_tutorial

使用数据库

数据库数据类型

INT 整数

DECIMAL(m,n) 小数 m位数,n位小数

VARCHAR(n) n位字符串,最多能存放n个字符

BLOB 二进制文件

DATE "yyyy-mm-dd" 日期

TIMESTAMP "yyyy-mm-dd hh:mm:ss" 时间

创建表格

create table `student`(
	`student_id` INT PRIMARY KEY,
	`name` VARCHAR(20),
    `major` VARCHAR(20)
);

describe `student`;

上面创建了一个关于学生的表,其中包含了‘学生id’,‘姓名’,‘主修’三个字

pimary key(student id)

也可以作为设置主键的方法

drop table `student`

删除表格

altertable table student add gpa decimal(3,2);

增加字段

altertable table student drop column gpa;

删除字段

INSERT INTO STUDENT VALUES(1,小白)

插入值

select * from student;

查询student中的所有资料

INSERT INTO student(name,major,student_id) VALUES('小装','英語',3);

自己定义插入值的顺序

限制约束

字段名 类型 constraints

形式

not null 不许为空

unique 不许重复

default XXXX 预设为xxxx

AUTOINCREMENT 自增

注释

-- 前面加上这个整行视为注释

修改删除资料

set sql_safe_updates = 0;

首先要做这一步设置

UPDATE `student`
SET `major` = '英語文华'
WHERE `major` = '英語';

这一步可以把所有的英語替换成英語文华,也可以在where中设置多个条目。

UPDATE student
set name = 小灰,major = 物理
WHERE  student_id = 1;

设置单一条目的属性值

set major = ‘物理’

所有条目的major属性都改成物理

DELETE FROM student

WHERE xxxxx

删除条目

只写DELETE FROM student 会把表里所有资料都删除

取得资料

select * from student;

前面已经学习过了这个取得资料的方法

select name ,major from student 
(或者写成select * from student,where major = '英语'表示选出主修是英语的条目)
ORDER BY score DESC
LIMIT 3;

取得多个属性 并且按分数排序,由高到低(默认ASC由低到高),只要前三笔。

where后的多个要用OR或AND分割或者采用WHERE major IN('历史','英語','生物);的形式

SELECT DISTINCT `SEX` FROM `EMPLOYEE`;

不可替代的选择

创建一个新表格

下面的操作都是为了创建一个新表单为后续学习作准备

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
);
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
);

ON DELETE SET NULL外键对应不到就把对应的属性设成空

ALTER TABLE `employee`
ADD FOREIGN KEY(`branch_id`)
REFERENCES `branch`(`branch_id`)
ON DELETE SET NULL;

ALTER TABLE `employee`
ADD FOREIGN KEY(`sup_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
);

ON DELETE CASCADE 外键对应不到了就删除整条数据,因为emp id既是primary key也是foreign key,所以不能用set null,因为primary key 不能为null

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',29888,2,206);
INSERT INTO `employee` VALUES(208,'小兰','2000-12-19','M',35000,3,206);
INSERT INTO `employee` VALUES(209,'小白','1997-01-22','F',39888,3,207);
INSERT INTO `employee` VALUES(210,'小蘭','1925-11-10','F',84888,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');

聚合函数

SELECT COUNT(*)
FROM `employee`
WHERE `birth_date`>'1970-01-01'AND `sex` = 'F';

计数 count()

select avg(`salary`) from `employee`;

取平均avg()

select sum(`salary`) from `employee`;

取总 sum()

select max(`salary`) from `employee`;

最高最低 max() min()

万用字元

select * from `client`
where `phone` like '%567';

select * from `client`
where `phone` like '189%';


select * from `employee`
where `brith_date` like '_____10%';

%代表多个字元,_代表一个字元,在查询的时候用

查询多个属性并且合并

SELECT `emp_id` AS `total_id`,`name` AS `total_name`
FROM `employee`
UNION
SELECT `client_id`,`client_name`
FROM `client`;

利用关键字UNION

返回符合条件的

SELECT `employee`.`emp_id`,`employee`.`name`,`branch`.`branch_name`
FROM `employee`
JOIN `branch`
ON `employee`.`emp_id`=`branch`.`manager_id`

on后面是条件

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

子查询

SELECT `name`
FROM `employee`
WHERE `emp_id`=(
SELECT `manager_id`
FROM `branch`
WHERE`branch_name`='研发'
);

相当于查询了emp_id = 206的条目

select `name` from `employee`
where `emp_id`in (
  select `emp_id` from `works_with`
  where `total_sales` > 50000
  );

查询销售额大于50000的员工

标签:branch,学习,client,student,SQL,employee,id,name
From: https://www.cnblogs.com/7869-cistarr-5783/p/17680310.html

相关文章

  • springCloud学习笔记整理
    springCloud学习笔记整理1.分布式分布式的概念:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。分布式架构的优缺点:优点:降低服务耦合有利于服务升级和拓展缺点:服务调用关系错综复杂2.微服务微服务的上述特性其实是在给分布式架构制......
  • 中国科教工作者协会与CCF PTA联合认证学习须知
    中国科教工作者协会与CCFPTA联合认证学习须知1、参与认证人员需在科技学堂(www.sciclass.cn)上进行课程学习,然后在PTA官网(pta.ccf.org.cn)报名并参加认证考试,考试及课程学习达标者,即可获得由中国青少年科技教育工作者协会与中国计算机学会联合颁发的认证证书。具体报名流程及认......
  • sqlserver中怎么将一列数据拼接成一个字符串
     SELECTb.name+','FROM dbo.TechnologyColorajoin[dbo].[CustomColor]b ona.customcolorid=b.id WHEREProductId=345882800324677FORxmlPATH('')SELECT需要合并的字段+','FROM表名FORXMLPATH(''......
  • MySQL 存储引擎 有几种 都有什么优缺点?
    MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。它们各自有一些优缺点:1.InnoDB存储引擎:优点:-提供了事务管理、回滚、崩溃修复能力、和多版本并发控制的事务安全;-支持外键约束,提高了数据的一致性和完整性;-支持行级锁,提高了并发性能;-支持外键约束,提高了数据的一致性和......
  • Python学习 -- Math模块和Random模块
    math模块提供了许多数学函数,用于执行各种数学运算。以下是一些常用的math函数以及相应的示例代码:math.sqrt(x):计算平方根。importmathx=25square_root=math.sqrt(x)print(f"√{x}={square_root}")math.pow(x,y):计算x的y次方。importmathx=2y=3result......
  • Mysql 引擎 InnoDB和MyISAM的区别
    1、InnoDB、MyISAM区别MySQL引擎InnoDB和MyISAM是MySQL中常用的两种存储引擎,它们具有以下不同的特点:InnoDB支持事务,而MyISAM不支持事务。InnoDB支持行级锁定,而MyISAM支持表级锁定。在并发访问的情况下,InnoDB的性能更好。InnoDB支持外键约束,而MyISAM不支持......
  • Node 配合 webseket 订阅 pgsql 的数据表变化
    pg订阅传送门服务端代码const{Client}=require('pg');constWebSocket=require('ws');constwss=newWebSocket.Server({port:8080,perMessageDeflate:false,verifyClient:(info,cb)=>{constorigin=info.origin||'......
  • BUUCTF [极客大挑战 2019]FinalSQL
    通过尝试发现注入点在search.php。传递?id=1^1报ERROR!!!;传递?id=1^0报NO!Notthis!Clickothers~~~布尔盲注importrequestsimporttimeurl="http://eab3a4cf-d57d-4236-a9f9-1383446ba4e1.node4.buuoj.cn:81/search.php?"result=''temp={"id":......
  • PostgreSQL 存储结构
    存储结构一、逻辑存储结构逻辑存储结构通常指表、索引、视图、函数等逻辑对象(也称数据库对象)创建一个Database时会为这个Database创建一个名为public的默认Schema。每个Database可以有多个Schema,在这个数据库中创建其他数据库对象时如果没有指定Schema,都会在public这个Schema中。S......
  • Flink SQL基本语法
    在flinksql中,对表名、字段名、函数名等是严格区分大小写的,为了兼容hive等其他仓库,建议建表时,表名和字段名都采用下划线连接单词的方式,以避免大小写问题。比如hive,是不区分大小写的,所有大写字母最终都会被系统转化为小写字母,此时使用flinksql去读写hive,出现大写字母时......