数据库sql速通计划(最基础概念)

参考b站视频0基础入门

【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库_哔哩哔哩_bilibili

 以下是笔记(基本对照讲的内容敲的)

一、入门概念

主键(primary key):唯一区分 不重复

外键(branch_id):只能对应表格的主键/也可以对应自己表格的主键

*可以有多个主键 属性不可唯一表示(组合属性 表示唯一资料)

二、sql语法

cmd 进入 mysql -u root -p

CREATE DATABASE sql_tutorial;``可以区分 //创建资料库

SHOW DATABASES; //显示数据库

DROP DATABASE ``; //删除资料库

DESCRIBE c; //显示表格属性

ALTER TABLE `` ADD/DROP COLUMN; //增加/删除属性

INSER INTO `` VALUES(); // 增加资料

UPDATE branch ... SET...WHERE...; //修改资料

SELECT * FROM `` ORDER BY DESC ; //取得所有资料 降序排序

LIMIT 3; //限制资料数目

6种资料形态

int 整数

decimal(m,n) 有小数点(几位数,小数点占几位)

VARCHAR(n) 字串(最大长度)

BLOB 二进制资料 图片,影片etc

DATE 日期'yyyy-mm-dd'

TIMESTAMP 记录时间

创建资料库表格

USE ``; //使用表格

CREATE DATABASE `sql_tutorial`;
SHOW DATABASES;
USE `sql_tutorial`;
​
CREATE TABLE `student`(
    `student_id` INT PRIMARY KEY,
    `name` VARCHAR(20),
    `major` VARCHAR(20)
    -- 也可以PRIMARY KEY(`student_id`)设置主键
    /*设置外键
    FOREIGN KEY (`manager_id`) REFERENES `employee`(`emp_id`) ON DELETE SET NULL
    */
);
​
DESCRIBE `student`; -- 显示表格属性-对应设计表
DROP TABLE `student`;
​
ALTER TABLE `student` ADD gpa DECIMAL(3,2); -- 增加属性
ALTER TABLE `student` DROP COLUMN gpa; -- 删除属性

根据属性存入资料

INSERT INTO `student` VALUES(1,'小白','历史'); -- 存入一笔资料
SELECT * FROM `student`; -- 搜寻表格中全部资料
​
INSERT INTO `student`(`name`,`major`,`student_id`) VALUES('小黑',NULL,3);
-- 自定义存储属性顺序 注意 主键不能重复 不写默认NULL

constraints 限制 约束

#在CREATE的时候加上
CREATE TABLE `student`(
    `student_id` INT AUTO_INCREMENT, #自动+1 后续不需要手动输入
    `name` VARCHAR(20) NOT NULL, -- 非空
    `major` VARCHAR(20) UNIQUE, -- 唯一
    `teacher` VARCHAR(20) DEFAULT '教务处', -- 默认
    PRIMARY KEY(`student_id`)
);

修改删除资料

SET SQL_SAFE_UPDATES = 0; -- 将预设内容先删除
​
CREATE TABLE `student`(
    `student_id` INT PRIMARY KEY,
    `name` VARCHAR(20),
    `major` VARCHAR(20),
    `score` INT
);
​
SELECT * FROM `student`; //选中`student`表格中的所有内容
​
-- 修改资料
UPDATE `student` -- 更新student表格的资料
SET `major` = `英语文学` #将major改为英语文学
WHERE `major` = `英语`; #条件:major=英语
​
SET `major` = '生化', `name` = '小红' #修改两个资料
WHERE `major` = '生物' OR `major` = '化学'; #选中两个条件
​
-- 删除资料
DELETE FROM `student`
WHERE `name` = '小黑' AND `major` = '物理';
WHERE `score` > 60; #> >= <= < <>
​

区别:drop是删除表 delete是删除表中资料(保留列名)

获取资料SELECT

SELECT * FROM `student`; -- *为取得所有属性
​
SELECT `name`,`major` FROM `student`; -- 选择指定属性
SELECT DISTINCT `sex` FROM `employee`; -- 不重复
​
SELECT *
FROM `student`
ORDER BY `score` DESC; #默认由低到高ASC 升序排列 DESC降序排列
​
SELECT *
FROM `student`
ORDER BY `score`, `student_id` -- 先比较score 相同比较student_id
LIMIT 2; #限制回传资料数量
​
SELECT *
FROM `student`
WHERE `major` IN('历史','生物','英语'); -- 判读有无在括号内内容 等同于OR

聚合函数aggregate functions

SELECT COUNT(*) FROM `employee` -- 计数
WHERE `date` > '1970-01-01' AND `sex` = 'F'; #加入条件
SELECT AVG(`salary`) FROM `salary`; -- 平均数
SELECT SUM(`salary`) FROM `employee`; -- 计算总和
SELECT MAX(`salary`) FROM `employee`; -- 取最高
SELECT MIN(`salary`) FROM `employee`; -- 取最低

万用字元wildcards %多个 _单个

SELECT * FROM `client` WHERE `phone` LIKE '%335'; -- 判断尾数是不是335 %代表多个字元 '%335'尾数 '254%'开头 '%254%'
SELECT * FROM `client` WHERE `phone_name` LIKE '艾%'; #LIKE '_____12%' 避免重复

并集union -- 属性合并

-- 两个相同属性合并
SELECT `name`
FROM `employee`
UNION
SELECT `employee_name`
FROM `client`
UNION
SELECT `branch_name`
FROM `branch`;
​
-- 多属性
SELECT `emp_id` AS `total_id`,`name` -- AS可以改名字
FROM `employee`
UNION
SELECT `client_id`,`client_name`;

连接join -- 连接两张表

SELECT `emp_id`,`name`,`branch_id`
FROM `employee`
JOIN `branch` #branch加在后边(右边)
ON `employee`.`emp_id` = `branch`.`manager_id`; #条件 也可以加入``.``,方便分辨属性来自的表格
​
LEFT JOIN
ON...; -- 左加入 无论条件有无成立资料全部回传(左表格)  不符合返回NULL(右表格)
-- RIGHT JOIN 右边表格全部回传

子查询subquery

-- 找到表中结果 再找对应表中具体内容 查询(查询)
SELECT `name`
FROM `employee`
WHERE `emp_id` = ( #如果有多个结果 WHERE `` IN()
    SELECT `manager_id`
    FROM `branch`
    WHERE `branch_name` = '研发';
);

ON DELETE(FOREIGN KEY)

FOREIGN KEY(m) REFERENCES`e`(`i`) ON DELETE SET NULL; -- 对应的内容被删除 表中FOREIGN KEY设置NULL 如表中i被删 m置NULL (外键对应主键 对应不到删除)
FOREIGN KEY(m) REFERENCES``(``) ON DELETE CASCADE; -- 可能都是主键 相同内容在两个表中 对应不到删除

三、python连接mysql

import mysql.connector

connection = mysql.connector.connect(host='localhost',

                                                                port='3306',

                                                                user='root',

                                                                pasxword='',

                                                                database='sql_tutorial')

cursor = connection.cursor()

cursor.execute('"USE sql_tutorial;") #选择资料库

cursor.execute('SELECT * FROM branch;') #取得资料

cursor.close()

connection.close()

以上 有错请指出!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值