diff --git "a/MySQL/20230214DDL,DML\347\254\224\350\256\260.md" "b/MySQL/20230214DDL,DML\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..85ee4f4dd78982c6667d77307e2ad92fb7121027 --- /dev/null +++ "b/MySQL/20230214DDL,DML\347\254\224\350\256\260.md" @@ -0,0 +1,34 @@ +# 笔记 + +- 数据库是什么? + - 存储数据的地方 + - DB:数据库(Database) + + +- 为什么要用数据库? + - 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 + - 用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 + + + - 数据库分类 + + - 早期:层次模型、网状模型、关系模型, + + - 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 + + - 目前市场上主要分: + - 关系型数据库、非关系型数据库两大类 + + + - 数据库有了,要怎么管理呢? + + - DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 + + - MySQL、Oracle、SqlServer都是数据库管理系统(DBMS,Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 + + +- SQL是什么? + + - SQL是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 + + 关系型数据库中的 数据,数据表,数据库,数据库管理系统,SQL 之间的联系 \ No newline at end of file diff --git "a/MySQL/20230216MySQL\347\254\224\350\256\260.md" "b/MySQL/20230216MySQL\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..5a0e3d7680fbee0588c45918b3ddd54c7b790eb3 --- /dev/null +++ "b/MySQL/20230216MySQL\347\254\224\350\256\260.md" @@ -0,0 +1,31 @@ +# 笔记 + +SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 + +## SQL的分类 + +| 名称 | 解释 | 命令 | +| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | +| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | +| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | +| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | +| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | + +其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 + +## SQL语法规范 + +(1)mysql的sql语法不区分大小写 + +- A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 + +​ ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) + +- B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 + + +(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +(4)数据库和表名、字段名等对象名中间不要包含空格 \ No newline at end of file diff --git "a/MySQL/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" "b/MySQL/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..6ffedd445b03ec3a40fe5e17fcaf8c624808f30b --- /dev/null +++ "b/MySQL/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" @@ -0,0 +1,288 @@ +# 笔记 + +数据库(Database) + +定点 decimal默认(10,0)其他 同上 + +浮点 float double + +float(M,N)1 M表示限制整数+小数,一共只能存放M位长度,n限制小数的长度,如果小数部分超过了n会自动截断并四舍五入 + +字符串 + +固定长度的char默认是1,最大的是255 + +可变长度varchar(M)65535 这里的M不可以缺省 + +时间类型 date 年月日 time 时分秒 year datetime timestamp + +unsigned 无符号的 表示正数不能负数 + +null允许为空,not null 不允许为空 + +SQL语法 + +大小写不分 + +一般以;结尾 + +库名,表名,字段名(列名) 支持英文字母、-、数字 class two classTwo + +名称中,不要用空格 class two + +名称中,不能用SQL语句的关键字,create + +# 作业一 + +```java +-- 1、创建数据库test01_market +CREATE DATABASE test01_market; +USE test01_market; +-- 2、创建表格customers +CREATE TABLE customers( +c_num int(11), +c_name VARCHAR(50), +c_contact VARCHAR(50), +c_city VARCHAR(50), +c_birth date +); + +-- | 字段名 | 数据类型 | +-- | --------- | ----------- | +-- | c_num | int(11) | +-- | c_name | varchar(50) | +-- | c_contact | varchar(50) | +-- | c_city | varchar(50) | +-- | c_birth | date | +-- +-- **要求3:**将c_contact字段移动到c_birth字段后面 +ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; +-- **要求4:**将c_name字段数据类型改为 varchar(70) +ALTER TABLE customers MODIFY c_name VARCHAR(70); +-- **要求5:**将c_contact字段改名为c_phone +ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); +-- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) +ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; +-- **要求7:**将表名改为customers_info +ALTER TABLE customers RENAME TO customers_info; +-- **要求8:**删除字段c_city +ALTER TABLE customers_info DROP c_city; +DESC customers_info; +``` + +# 作业二 + +```java +-- 1、创建数据库test02_library +-- +CREATE DATABASE test02_library; +USE test02_library; +-- 2、创建表格books +-- +ALTER DATABASE test02_library CHARSET utf8; +ALTER TABLE books CHARSET utf8; +CREATE TABLE books( +b_id int(11), +b_name VARCHAR(50), +authors VARCHAR(100), +price float, +pubdate year, +note VARCHAR(100), +num int(100) +); +DESC books; +-- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +-- | ------- | -------- | ------------- | -------- | ---- | +-- | b_id | 书编号 | int(11) | 否 | 是 | +-- | b_name | 书名 | varchar(50) | 否 | 否 | +-- | authors | 作者 | varchar(100) | 否 | 否 | +-- | price | 价格 | float | 否 | 否 | +-- | pubdate | 出版日期 | year | 否 | 否 | +-- | note | 说明 | varchar(100) | 是 | 否 | +-- | num | 库存 | int(11) | 否 | 否 | +-- +-- 3、向books表中插入记录 +-- +-- 1) 指定所有字段名称插入第一条记录 +-- +insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'TalofAAA','Dickes',23,'1995','nove1',11); +-- 2)不指定字段名称插入第二记录 +-- +insert into books values (2,'EmmaT','janelure',35,'1993','joke',22); +-- 3)同时插入多条记录(剩下的所有记录) +-- +insert into books values (3,'StoryofJane','JaneTim',40,'2001','novel',0),(4,'LoveyDay','GeorgeByron',20,'2005','novel',30),(5,'Oldland','HonoreBlade',30,'2010','law',0),(6,'TheBattle','UptonSara',30,'1999','medicine',40),(7,'RoseHood','Richardhaggard',28,'2008','cartoon',28); +-- | b_id | b_name | authors | price | pubdate | note | num | +-- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | +-- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | +-- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | +-- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | +-- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | +-- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | +-- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | +-- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | +-- +-- 4、将小说类型(novel)的书的价格都增加5。 +-- +UPDATE books set price = price+5 WHERE note='nove1'; +-- 5、将名称为EmmaT的书的价格改为40。 +-- +UPDATE books set price = 40 where b_name='EmmaT'; +-- 6、删除库存为0的记录 +DELETE FROM books WHERE num=0; +``` + +# 作业三 + +```java +-- 1、创建数据库test03_bookstore +-- +CREATE DATABASE test03_bookstore; +USE test03_bookstore; +ALTER DATABASE test02_library CHARSET utf8; +ALTER TABLE book CHARSET utf8; +-- 2、创建book表 +-- +CREATE TABLE book( + id int(11), + title varchar(100), + author varchar(100), + price double(11,2), + sales int(11), + stock int(11), + img_path varchar(100) +); +DESC book; +-- ```mysql +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | title | varchar(100) | NO | | NULL | | +-- | author | varchar(100) | NO | | NULL | | +-- | price | double(11,2) | NO | | NULL | | +-- | sales | int(11) | NO | | NULL | | +-- | stock | int(11) | NO | | NULL | | +-- | img_path | varchar(100) | NO | | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----+-------------+------------+-------+-------+-------+----------------------------+ +-- | id | title | author | price | sales | stock | img_path | +-- +----+-------------+------------+-------+-------+-------+-----------------------------+ +-- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | +-- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | +-- +----+---------------+------------+-------+-------+-------+----------------------------+ +-- ``` +-- +INSERT INTO book VALUES (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg') +,(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); +-- 3、创建用户表users,并插入数据 +-- +CREATE TABLE users( +id int(11), +username varchar(100), +password varchar(100), +email varchar(100) +); +-- ```mysql +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | username | varchar(100) | NO | UNI | NULL | | +-- | password | varchar(100) | NO | | NULL | | +-- | email | varchar(100) | YES | | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----+----------+----------------------------------+--------------------+ +-- | id | username | password | email | +-- +----+----------+----------------------------------+--------------------+ +-- | 1 | admin | 112233 | admin@mxdx.com | +-- +----+----------+----------------------------------+--------------------+ +-- ``` +INSERT into users VALUES (1,'admin',112233,'admin@mxdx.com'); +-- +-- 4、创建订单表orders +-- +-- ```mysql +-- +--------------+--------------+------+-----+---------+-------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +--------------+--------------+------+-----+---------+-------+ +-- | id | varchar(100) | NO | PRI | NULL | | +-- | order_time | datetime | NO | | NULL | | +-- | total_count | int(11) | NO | | NULL | | +-- | total_amount | double(11,2) | NO | | NULL | | +-- | state | int(11) | NO | | NULL | | +-- | user_id | int(11) | NO | MUL | NULL | | +-- +--------------+--------------+------+-----+---------+-------+ +-- ``` +-- +create table orders( +id varchar(100), +order_time datetime, +total_count int(11), +total_amount double(11,2), +state int(11), +user_id int(11) +); + +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | id | order_time | total_count | total_amount | state | user_id | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- ``` +INSERT into ortetime VALUES ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); +-- +-- 5、创建订单明细表order_items +-- +-- ```mysql +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | count | int(11) | NO | | NULL | | +-- | amount | double(11,2) | NO | | NULL | | +-- | title | varchar(100) | NO | | NULL | | +-- | author | varchar(100) | NO | | NULL | | +-- | price | double(11,2) | NO | | NULL | | +-- | img_path | varchar(100) | NO | | NULL | | +-- | order_id | varchar(100) | NO | MUL | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +create table order_items( +id int(11), +count int(11), +amount double(11,2), +title varchar(100), +author varchar(100), +price double(11,2), +img_path varchar(100), +order_id varchar(100) +); +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----+-------+--------+---------+---------+-------+----------------+----------------+ +-- | id |count| amount| title | author | price | img_path | order_id | +-- +----+-------+--------+------------+----------+-------+----------------+----------------+ +-- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | +-- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- ``` +insert into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); + +``` + diff --git "a/MySQL/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" "b/MySQL/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..511641a13f3df176339886957d87a491475992c8 --- /dev/null +++ "b/MySQL/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" @@ -0,0 +1,348 @@ +# 笔记 + +约束 主键、唯一、非空、默认、自增、外键 + +1、主键约束 +(1)关键字是primary key +(2)特点 +A:每一个表只能有一个主键约束 +B:主键约束的字段值是不允许为null,也不允许重复的 + +如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 + +就可以给这样的字段加唯一键约束 + +2、唯一键约束: + +(1)关键字:unique key + +(2)特点 + +A:允许为null,但是不能重复 + +B:一个表可以有多个唯一键约束 + +3、非空约束 + +如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 + +4、默认值约束 + +如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, + +就可以使用默认值约束。 + +检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) + +6、外键约束 + +约束两个表的关系,或者是一个表的两个字段之间的关系。 + +(1)主表(父表)和从表(子表) + +主表:被依赖,被参考 + +从表:依赖别人的,参考别人的 + +外键约束等级为 on update/delete cascade /(set null) + +7、自增属性 + +维护某个字段的值自动增长的一个属性。 + +它的要求: + +(1)一个表最多只能有一个字段是自增的 + +(2)自增的字段必须是整数类型 + +(3)自增的字段必须是键约束的字段(通常是主键、唯一键) + +自增字段赋值为null和0的时候,会自增, + +如果赋值为其他的值,按照你指定的值来。 + +# 作业 + +```java +## 第1题 + +/*-- 1、创建数据库test01_company*/ +CREATE DATABASE test01_company; +USE test01_company; +2、创建表格offices +CREATE table offices( + officeCode int, + city varchar(30), + address varchar(50), + country varchar(50), + postalCode varchar(25) +); +-- | 字段名 | 数据类型 | +-- | ---------- | ----------- | +-- | officeCode | int | +-- | city | varchar(30) | +-- | address | varchar(50) | +-- | country | varchar(50) | +-- | postalCode | varchar(25) | +-- +-- 3、创建表格employees +-- +CREATE table employees( + empNum int(11), + lastName varchar(50), + firstName varchar(50), + mobile varchar(25), + `code` int, + jobTitle varchar(50), + birth date, + Note varchar(255), + Sex varchar(5) +); +-- | 字段名 | 数据类型 | +-- | --------- | ------------- | +-- | empNum | int(11) | +-- | lastName | varchar(50) | +-- | firstName | varchar(50) | +-- | mobile | varchar(25) | +-- | code | int | +-- | jobTitle | varchar(50) | +-- | birth | date | +-- | Note | varchar(255) | +-- | Sex | varchar(5) | +-- +-- **要求4:**将表employees的mobile字段修改到code字段后面。 +-- + ALTER table employees modify mobile VARCHAR(25) AFTER `code`; +-- **要求5:**将表employees的birth字段改名为birthday; +-- + ALTER table employees change birth birthday date; +-- **要求6:**修改sex字段,数据类型为char(1)。 +-- + alter table employees modify sex char(1); +-- **要求7:**删除字段note; +-- + alter table employees drop column note; +-- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); +-- + alter table employees add favoriate_activity VARCHAR(100); +-- **要求9:**将表employees的名称修改为 employees_info + alter table employees rename employees_info; + + + +``` + +```java +## 第2题 + +-- 1、创建数据库test02db +-- +create database test02db; +use test02db; +-- 2、创建表格pet +-- +create table pet( + name varchar(20) COMMENT'宠物名称', + owner varchar(20) comment'宠物主人', + species varchar(20) comment'种类', + sex char(1) comment'性别', + birth year comment'出生日期', + death year comment'死亡日期' +); +-- | 字段名 | 字段说明 | 数据类型 | +-- | ------- | -------- | ----------- | +-- | name | 宠物名称 | varchar(20) | +-- | owner | 宠物主人 | varchar(20) | +-- | species | 种类 | varchar(20) | +-- | sex | 性别 | char(1) | +-- | birth | 出生日期 | year | +-- | death | 死亡日期 | year | +-- +-- 3、添加记录 +insert into pet (`name`,`owner`,species,sex,birth,death) values ('Fluffy','harold','Cat','f',2003,2010), + ('Claws','gwen','Cat','m',2004,NULL), + ('Butty',NULL,'Dog','f',2009,NULL), + ('Fang','benny','Dog','m',2000,NULL), + ('bowser','diane','Dog','m',2003,2009), + ('Chirpy',NULL,'Bird','f',2008,NULL); +-- | name | owner | species | sex | birth | death | +-- | ------ | ------ | ------- | ---- | ----- | ----- | +-- | Fluffy | harold | Cat | f | 2003 | 2010 | +-- | Claws | gwen | Cat | m | 2004 | | +-- | Buffy | | Dog | f | 2009 | | +-- | Fang | benny | Dog | m | 2000 | | +-- | bowser | diane | Dog | m | 2003 | 2009 | +-- | Chirpy | | Bird | f | 2008 | | +-- +-- 4、 添加字段主人的生日owner_birth。 +-- +alter table pet add owner_birth date; +-- 5、 将名称为Claws的猫的主人改为kevin +-- +UPDATE pet SET `owner` = 'kevin' WHERE `name` = 'Claws'; +-- 6、 将没有死的狗的主人改为duck +-- +update pet set `owner` ='duck'where `name` ='Fang'; +update pet set `owner` ='duck'where `name` ='bowser'; +-- 7、 查询没有主人的宠物的名字; +-- +SELECT `name` FROM pet WHERE `owner` IS NULL; +-- 8、 查询已经死了的cat的姓名,主人,以及去世时间; +-- +SELECT `name`, `owner`, death FROM pet WHERE species='Cat'and death=2010; +-- 9、 删除已经死亡的狗 +-- +delete from pet where species='dog' and death=2009; +-- 10、查询所有宠物信息 +SELECT * FROM pet; +``` + +```java +-- 第3题 +-- 1、创建数据库:test03_company +create database test03_company; +use test03_company; +CREATE database test03_company CHARSET utf8; +-- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 +-- +-- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 +create table department( + depid int not null primary key , + depname char(6) not null unique key, + deinfo varchar(300) +); +-- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 +-- +-- * ​ 雇员编号为主键; +-- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); +-- * ​ 性别默认为男; +create table employee ( + empid int primary key auto_increment, + name varchar(10) not null, + sex enum('男','女') not null default '男', + title varchar(10), + birthday date, + depid int foreign key references department(depid) +) +-- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 +create table salary( +empid int not null primary key, +basesalary VARCHAR(2000) not null, +titlesalary VARCHAR(5000) not null, +deduction VARCHAR(1000) not null +); +-- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) +-- 4、添加数据如下: +-- +-- 部门表: +-- +-- | 部门编号 | 部门名称 | 部门简介 | +-- | -------- | -------- | ------------ | +-- | 111 | 生产部 | Null | +-- | 222 | 销售部 | Null | +-- | 333 | 人事部 | 人力资源管理 | +-- +INSERT INTO department (depid,depname,deinfo) +VALUES(111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); +-- 雇员表: +-- +-- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | +-- | -------- | ---- | ---- | ---------- | ---------- | ------------ | +-- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | +-- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | +-- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | +-- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | +-- +INSERT INTO employee (empid,name,sex,title,birthday,depid) VALUES +(1001,'张三','男','高级工程师','1975-1-1',111), +(1002,'李四','女','助工','1985-1-1',111), +(1003,'王五','男','工程师','1978-11-11',222), +(1004,'张六','男','工程师','1999-1-1',222); +-- 工资表: +-- +-- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | +-- | -------- | -------- | -------- | ---- | +-- | 1001 | 2200 | 1100 | 200 | +-- | 1002 | 1200 | 200 | NULL | +-- | 1003 | 2900 | 700 | 200 | +-- | 1004 | 1950 | 700 | 150 | +INSERT INTO salary (empid,basesalary,titlesalary,deduction) VALUES +(1001,2200,1100,200), +(1002,1200,200,null), +(1003,2900,700,200), +(1004,1950,700,150); +``` + +```java +## 第4题 + +-- 1、创建一个数据库:test04_school +-- +CREATE database test04_school; +use test04_school; +-- 2、创建如下表格 +-- +-- 表1 Department表的定义 +-- +-- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +-- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +-- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | +-- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | +-- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | +-- +CREATE table Department( +DepNo int(10) not null PRIMARY key UNIQUE key comment '部门号', +DepName VARCHAR(20) not null comment '部门名称', +DepNote VARCHAR(50) comment '部门备注' +); +-- 表2 Teacher表的定义 +-- +-- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +-- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +-- | Number | 教工号 | int | 是 | 否 | 是 | 是 | +-- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | +-- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | +-- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | +-- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | +-- | Salary | 工资 | float | 否 | 否 | 否 | 否 | +-- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | +-- +CREATE table Teacher( +Number int not null primary key unique key comment '教工号', +`Name` VARCHAR(30) not null comment '姓名', +Sex VARCHAR(4) COMMENT '性别', +Birth date comment '出生日期', +DepNo int FOREIGN key comment '部门号', +Salry float comment '工资', +Address VARCHAR(100) comment '家庭地址' +); +-- 3、添加记录 +-- +-- | **DepNo** | **DepName** | **DepNote** | +-- | --------- | ----------- | ------------------ | +-- | 601 | 软件技术系 | 软件技术等专业 | +-- | 602 | 网络技术系 | 多媒体技术等专业 | +-- | 603 | 艺术设计系 | 广告艺术设计等专业 | +-- | 604 | 管理工程系 | 连锁经营管理等专业 | +-- +alter table Department (DepNo,DepName,DepNote) values (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),('604,管理工程系','连锁经营管理等专业'); +-- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | +-- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | +-- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | +-- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | +-- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | +-- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | +-- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | +-- +ALTER table Teacher (Number,`Name`,Sex,Birth,DepNo,Salary,Address)values +(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), +(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), +(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), +(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), +(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); +-- 4、用SELECT语句查询Teacher表的所有记录。 +SELECT * from Teacher; +select * from department; +``` + diff --git "a/MySQL/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" "b/MySQL/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..dfdaadd7f871fd95f7a31b3fbaa40b9942291372 --- /dev/null +++ "b/MySQL/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" @@ -0,0 +1,195 @@ +# 笔记 + +SELECT语句 + +SELECT语句是用于查看计算结果、或者查看从数据表中筛选出的数据的。 + +SELECT语句的基本语法: + +**使用别名** + +在当前select语句中给某个字段或表达式计算结果,或表等取个临时名称,便于当前select语句的编写和理解。这个临时名称称为别名。 + +结果去重 + +mysql可以在查询结果中使用distinct关键字去重。 + +```mysql +select distinct 字段列表 from 表名称 【where 条件】; +select distinct did from t_employee; +``` + +**算术运算符(掌握)** + +加:+ + + 在MySQL +就是求和,没有字符串拼接 + +减:- + +乘:* + +除:/ div(只保留整数部分) + + div:两个数相除只保留整数部分 + + /:数学中的除 + +模:% mod + +比较运算符(掌握) + +\```mysql + +大于:> + +小于:< + +大于等于:>= + +小于等于:>= + +等于:= 不能用于null判断 + +不等于:!= 或 <> 不能用于null判断 + +判断是null 用 is null 或 用 <=> null + +判断不是null is not null + +**区间或集合范围比较运算符(掌握)** + +\```mysql + +区间范围:between x and y + + not between x and y + +集合范围:in (x,x,x) + + not in(x,x,x) + + between ... and ... 结果包含两端的边界 + +**模糊匹配比较运算符(掌握)** + +%:代表任意个字符 + +_:代表一个字符,如果两个下划线代表两个字符 + +\```mysql + + **逻辑运算符(掌握)** + +\```mysql + +逻辑与:&& 或 and + +逻辑或:|| 或 or + +逻辑非:! 或 not + +逻辑异或: xor + +\``` + +**关于null值的问题(掌握)** + +\```mysql + +\#(1)判断时 + +xx is null + +xx is not null + +xx <=> null + +**所有的计算遇到的null都是null\**** + +# 作业 + +```MySQL +#第1题:员工表 +create database abc charset utf8; +use abc; +drop table if exists `employee`; +#创建employee表 +CREATE TABLE employee( + id INT, + `name` VARCHAR(20), + sex VARCHAR(20), + tel VARCHAR(20), + addr VARCHAR(50), + salary FLOAT +); + +#添加信息 +INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES +(10001,'张一一','男','13456789000','广东韶关',10010.58), +(10002,'刘小红','女','13454319000','广东江门',12010.21), +(10003,'李四','男','0751-1234567','广东佛山',10040.11), +(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), +(10005,'王艳','男',NULL,'广东广州',14050.16); +select * from employee; +#**要求1:**查询出薪资在12000~13000之间的员工信息。 +select * from employee where salary between 12000 and 13000; +#**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 +select id,`name`,addr from employee where `name` like '%刘%'; +#**要求3:**将“李四”的家庭住址改为“广东韶关” +update employee set addr='广东韶关' where name='李四'; +#**要求4:**查询出名字中带“小”的员工 +select * from employee where name like '%小%'; +#**要求5:**查询出薪资高于11000的男员工信息 +select * from employee where salary>11000 and sex ='男'; +#**要求6:**查询没有登记电话号码的员工 +select * from employee where tel is null; +#**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 +select * from employee where salary >12000 or addr ='广东深圳' or addr ='广东广州'; +#**要求8:**查询每个员工的年薪,显示“姓名、年薪” +select `name`,salary*12 as 年薪 from employee; + + +``` + +```mysql +## 第2题:国家信息表 +#countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 +create database aass charset utf8; +use aass; +DROP TABLE IF EXISTS `countries_info`; +CREATE TABLE `countries_info`( + `name` VARCHAR(100), + `continent` VARCHAR(100), + `area` INT, + population INT, + gdp BIGINT +); + +INSERT INTO countries_info VALUES +('Afghanistan','Asia',652230,25500100,20343000000), +('Albania','Europe',28748,2831741,12960000000), +('Algeria','Africa',2381741,37100000,188681000000), +('Andorra','Europe',468,78115,3712000000), +('Angola','Africa',1246700,20609294,100990000000); +#**要求1:** 查询大国 的国家名称、人口和面积。 +#如果一个国家满足下述两个条件之一,则认为该国是 大国 : +#- 面积至少为 300万平方公里(即,3000000 km2) +#- 人口至少为 2500 万(即 25000000) +select `name`,population,area from countries_info where area>3000000 or population>25000000; +#**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 +select `name`,continent,area,population,gdp from countries_info where continent = 'asia'; +#**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 +select * from countries_info where area <10000 and population <100000; +#**要求4:**查询国家名字中包含“o“字母的国家信息 +select * from countries_info where `name` like '%o%'; +#**要求5:**查询GDP值超过10000000000的国家信息 +select * from countries_info where gdp>10000000000; +#**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” +select name 国家名,population,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; +#**要求7:**查询人均贡献GDP值低于1000的国家信息。 +select * from countries_info where gdp/population<1000; +#**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” +select `name` 国家名,area 面积,population 人口,area/population 人均国土面积值 from countries_info; +``` +