MySQL數據庫CRUD語句快速入門


本文目錄:

SQL語句... 1

一、針對數據庫database和表table的操作... 1

1、database和table的常見操作... 1

2 操作數據庫... 2

3、操作表... 3

4、針對表中數據的增刪改查... 4

5、表的約束... 9

6 表的關系... 11

Day11

SQL語句

sql語句,一種用於操作數據庫的語言

數據庫, 簡單地理解為硬盤上的文件, 可以存放數據

sql 語句大致可以分類兩大類

進入數據庫的方法:

1. 命令行代碼:

進入數據庫C:\mysql -hlocalhost -P3306 -uroot -p123456

啟動數據庫 net start mysql

停止數據庫net stop mysql

一、針對數據庫database和表table的操作

1、database和table的常見操作

創建create

查看show

修改alter

刪除drop

// 創建一個數據庫

create database mydb;

// 查看所有的數據庫庫

show databases;

// 刪除 mydb

drop database mydb;

// 刪除 user 表

drop table user;

針對表中的記錄的操作

增 insert

刪 delete

改 update

查 select

2 操作數據庫

創建一個名稱為mydb1的數據庫

create database mydb1;

創建一個使用utf-8字符集的mydb2數據庫。

create database mydb2 character set utf8;

創建一個使用utf-8字符集,並帶校對規則的mydb3數據庫。

create database mydb3 character set utf8 collate utf8_general_ci;

查看當前數據庫服務器中的所有數據庫

show databases;

查看前面創建的mydb2數據庫的定義信息,字符信息

show create database mydb2;

刪除前面創建的mydb3數據庫

drop database mydb3;

將mydb2的字符集修改為gbk

alter database mydb2 character set gbk;

// 備份數據庫

use mydb2;

create table a

(

name varchar(20)

);

// 插入數據

insert into a (name) values("zhangsan");

insert into a (name) values("wangwu");

// 備份數據庫

mysqldump -uroot -proot mydb1 > d:\a.sql

這條命令跟mysql是一個級別的,所以不能在mysql下面使用。

// 刪除 mydb2

drop database mydb2;

// 恢復數據庫

create database mydb22;

source d:\a.sql

// source 命令

指定一個sql腳本

關閉報錯聲音

Mysql –uroot –p123456 -b

3、操作表

1. 創建表

創建員工表

Id 整形

name 字符型

sex 字符型或bit型

brithday 日期型

Entry_date 日期型

job 字符型

Salary 小數型

resume 大文本型

創建表:

create table employee

(

id int,

name varchar(20),

gender varchar(6),

brithday date,

entry_date date,

job varchar(20),

salary double,

reshme text

);

2. 修改表

在上面員工表的基礎上增加一個image列

alter table employee add image blob;

修改job列,使其長度為60

alter table employee modify job varchar(60);

刪除sex列。

alter table employee drop sex;

表名改為users。

rename table employee to user;

修改表的字符集為utf-8

alter table user character set utf8;

列名name修改為username

alter table user change column name username varchar(20);

查看所有表

show tables;

查看表的創建語句

show create table user;

查看表結構

desc user;

刪除 user 表

drop table user;

4、針對表中數據的增刪改查

針對表中的數據操作無外乎四個:增刪改查 crud create

1. insert語句

employee.sql

create table employee

(

id int,

name varchar(20),

sex varchar(10),

birthday date,

salary float,

entry_date date,

resume text

);

// 向員工表插入三條記錄

Insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(1,'zhangsan','male','1987-11-23',1500,'2010-2-18','good boy');

insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(2,'wangwu','male','1988-11-23',1200,'2010-2-18','good boy');

insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(3,'xiaohong','female','1983-11-23',1800,'2010-2-18','good girl');

insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(4,'趙楠','男','1986-11-23',3800,'2011-2-18','絕種好男人');

// 查看表的所有記錄

select * from employee;

// 查看數據使用的所有編碼

show variables like 'character%';

// 修改客戶端的編碼 為 gbk

set character_set_client=gbk;

// 修改結果集的編碼為gbk

set character_set_results=gbk;

// insert 語句的其他寫法

create table a

(

username varchar(20),

password varchar(20)

);

insert into a values('zs','111');

insert into a values('wangwu','2222'),('lisi','3333');

insert a values('aaa','bbb');

insert a (username) values('aaa');

2. update語句

將所有員工薪水修改為5000元

update employee set salary=5000;

將姓名為’zhangsan’的員工薪水修改為3000元。

update employee set salary=3000 where name='zhangsan';

將姓名為’lisi’的員工薪水修改為4000元,sex改為female。

update employee set salary=4000,sex='female' where name='wangwu';

將xiaohong的薪水在原有基礎上增加1000元

update employee set salary=salary+1000 where name='xiaohong';

3. delete語句

刪除表中name為’趙楠’的記錄。

delete from employee where name='趙楠';

刪除表中所有記錄。Delete是一條條的刪,如果條目很多的話,會效率很低

delete from employee;

使用truncate刪除表中記錄。 摧毀表再創建表 盡量用這個

truncate employee;

4. select語句

student.sql

create table student(

id int,

name varchar(20),

chinese float,

english float,

math float

);

insert into student(id,name,chinese,english,math) values(1,'張小明',89,78,90);

insert into student(id,name,chinese,english,math) values(2,'李進',67,53,95);

insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);

insert into student(id,name,chinese,english,math) values(4,'李一',88,98,92);

insert into student(id,name,chinese,english,math) values(5,'李來財',82,84,67);

insert into student(id,name,chinese,english,math) values(6,'張進寶',55,85,45);

insert into student(id,name,chinese,english,math) values(7,'黃蓉',75,65,30);

查詢表中所有學生的信息。

select * from student;

查詢表中所有學生的姓名和對應的英語成績。

select name,english from student;

過濾表中重復數據。

select distinct english from student;

在所有學生分數上加10分特長分。

select name,english+10,chinese+10,math+10 from student;

統計每個學生的總分。

select name,english+chinese+math as sum from student;

使用別名表示學生分數。

where 子句

查詢姓名為李一的學生成績

select * from student where name='李一';

查詢英語成績大於90分的同學

select * from student where english>90;

查詢總分大於200分的所有同學

select name,english+chinese+math sum from student where english+chinese+math>200;

此處可以不用as

運算符

查詢英語分數在 80-90之間的同學。

select * from student where english between 65 and 85;

查詢數學分數為89,90,91的同學。

select name,math from student where math in(89,90,91);

查詢所有姓李的學生成績。

select * from student where name like '李%';

// 查詢姓李的兩個字的學生

select * from student where name like '李_';

查詢數學分>80,語文分>80的同學。

select * from student where math>80 and chinese>80;

查詢英語>80或者總分>200的同學

select *,chinese+math+english from student where english>80 or chinese+english+math>200;

order by 子句

對數學成績排序后輸出。

select * from student order by math;

對總分排序后輸出,然后再按從高到低的順序輸出

select *,chinese+math+english from student order by chinese+math+english desc;

對姓李的學生成績排序輸出 order從句是需要放在where從句的后面

select *,chinese+math+english from student where name like '李%' order by chinese+math+english;

合計函數

count

統計一個班級共有多少學生?

select count(*) from student;

統計數學成績大於90的學生有多少個?

select count(*) from student where math>90;

統計總分大於230的人數有多少?

select count(*) from student where chinese+math+english>230;

sum

統計一個班級數學總成績?

select sum(math) from student;

統計一個班級語文、英語、數學各科的總成績

select sum(math),sum(chinese),sum(english) from student;

統計一個班級語文、英語、數學的成績總和

select sum(math+chinese+english) from student;

統計一個班級語文成績平均分

select sum(chinese)/count(*) from student;

缺考的不參與計算

select sum(chinese)/count(chinese) from student;

avg

語文平均分

select avg(chinese) from student;

max/min

語文最 高分

select max(chinese) from student;

select語句(6)

group by

訂單表

create table orders(

id int,

product varchar(20),

price float

);

insert into orders(id,product,price) values(1,'電視',900);

insert into orders(id,product,price) values(2,'洗衣機',100);

insert into orders(id,product,price) values(3,'洗衣粉',90);

insert into orders(id,product,price) values(4,'桔子',9);

insert into orders(id,product,price) values(5,'洗衣粉',90);

將商品歸類

select * from orders group by product;

顯示單類商品總結

select *,sum(price) from orders group by product;

商品分類 顯示單類商品總價大於100的

select *,sum(price) from orders group by product having sum(price)>100;

// 將單價大於20 的商品進行歸類顯示 按照價格排序

select * from orders where price>20 group by product order by price;

5、表的約束

表的約束就是在定義表時,我們可以在創建表的同時為字段增加約束,對將來插入的數據做一些限定

一、表的約束

表的約束就是在定義表時,為表中的字段加一些約束條件,對將來插入的數據做一些限定

1. 唯一約束 unique

create table a

(

id int,

username varchar(20) unique,

password varchar(20)

);

insert into a (id,username,password) values(1,'zhangsan','1111');

insert into a (id,username,password) values(2,'wangwu','1111');

2. 非空約束 not null

create table b

(

id int not null,

name varchar(20)

);

insert into b (id,name) values (1,'aaaa');

insert into b (id,name) values (1,'bbbb');

3. 主鍵約束 相當於 唯一約束+非空約束

數據庫中的每張表都應該至少有一個主鍵,通常是id

create table c

(

id int primary key,

name varchar(20)

);

insert into c(id,name) values (1,'aaaa');

insert into c(id,name) values (2,'bbbb');

create table d

(

firstname varchar(20),

lastname varchar(20),

primary key(firstname, lastname)

);

insert into d (firstname, lastname) values ('tom', 'cat');

insert into d (firstname, lastname) values ('tom', 'hks');

create table e

(

id int ,

name varchar(20)

);

insert into e (id,name) values(1,'aaa');

為表加上主鍵約束

alter table e add primary key(id);

此處修改的命令:

修改job列,使其長度為60。

alter table employee modify job varchar(60);

刪除主鍵約束

alter table e drop primary key;

4. 定義主鍵自動增長

這個的作用就是讓id鍵隨着條目的增加,自動往上增長。

注意主鍵類型必須是int,只有int類型的才可以自增

create table f

(

id int primary key auto_increment,

name varchar(20)

);

insert into f(name) values ('aaa');

insert into f(id,name) values (11,'bbb');

mysql> select * from f;

+----+------+

| id | name |

+----+------+

| 1 | aaa |

| 2 | aaa |

| 3 | aaa |

| 4 | aaa |

| 11 | bbb |

| 12 | aaa |

| 13 | aaa |

| 14 | aaa |

| 15 | aaa |

| 16 | aaa |

+----+------+

外鍵約束

約束力: 插入的外鍵值必須為被參照列存在的值

被參照表中被參照的數據不允許刪除

注意:外鍵約束並沒有非空和唯一的約束力

創建丈夫表和妻子表

create table husband

(

id int primary key auto_increment,

name varchar(20)

);

create table wife

(

id int primary key auto_increment,

name varchar(20),

husbandid int,

constraint husbandid_FK foreign key(husbandid) references husband(id)

);

外界約束:Constraint是定義外鍵約束的,foreign key是外鍵的名稱 參照某張表的主鍵

分別添加兩條記錄

insert into husband(name) values ('laobi');

insert into husband(name) values ('laoyu');

insert into wife(name,husbandid) values ('fengjie',2);

insert into wife(name,husbandid) values ('furongjie',1);

fengjie 找老公

select * from husband where id=(select husbandid from wife where name='fengjie');

delete from husband where name='laoyu';

6 表的關系

1 多對一

創建部門表

create table department

(

id int primary key auto_increment,

name varchar(20)

);

添加三個部門信息

insert into department(name) values('開發部');

insert into department(name) values('銷售部');

insert into department(name) values('人事部');

創建員工表

create table employee

(

id int primary key auto_increment,

name varchar(20),

departmentid int,

constraint departmentid_FK foreign key(departmentid) references department(id)

);

添加六個員工信息

insert into employee(name,departmentid) values ('張三',1);

insert into employee(name,departmentid) values ('李四',1);

insert into employee(name,departmentid) values ('王五',2);

insert into employee(name,departmentid) values ('趙六',3);

insert into employee(name,departmentid) values ('田七',3);

insert into employee(name,departmentid) values ('周八',null);

多表的查詢

查出1號部門所有的員工

select * from employee where departmentid=1;

查出開發部所有的員工

select * from employee where departmentid=(select id from department where name='開發部');

查出趙六在那個部門

select * from department where id=(select departmentid from employee where name='趙六');

--------------------------------------

聯合查詢

查出開發部所有的員工

select * from department,employee;

+----+--------+----+------+--------------+

| id | name | id | name | departmentid |

+----+--------+----+------+--------------+

| 1 | 開發部 | 1 | 張三 | 1 |

| 2 | 銷售部 | 1 | 張三 | 1 |

| 3 | 人事部 | 1 | 張三 | 1 |

| 1 | 開發部 | 2 | 李四 | 1 |

| 2 | 銷售部 | 2 | 李四 | 1 |

| 3 | 人事部 | 2 | 李四 | 1 |

| 1 | 開發部 | 3 | 王五 | 2 |

| 2 | 銷售部 | 3 | 王五 | 2 |

| 3 | 人事部 | 3 | 王五 | 2 |

| 1 | 開發部 | 4 | 趙六 | 3 |

| 2 | 銷售部 | 4 | 趙六 | 3 |

| 3 | 人事部 | 4 | 趙六 | 3 |

| 1 | 開發部 | 5 | 田七 | 3 |

| 2 | 銷售部 | 5 | 田七 | 3 |

| 3 | 人事部 | 5 | 田七 | 3 |

| 1 | 開發部 | 6 | 周八 | NULL |

| 2 | 銷售部 | 6 | 周八 | NULL |

| 3 | 人事部 | 6 | 周八 | NULL |

+----+--------+----+------+--------------+

笛卡爾集 多張表的所有記錄的排列組合

笛卡爾集當中有很多部匹配的數據(參照表外鍵列的值和被參照表主鍵的值不一致) 為了方便 以下稱為廢數據

加條件去掉廢數據

select * from department,employee where employee.departmentid=department.id;

加條件做查詢

select * from department,employee where employee.departmentid=department.id and department.name='開發部';

優化 給表加別名 只保留需要的數據

select e.* from department d,employee e where e.departmentid=d.id and d.name='開發部';

查出趙六在那個部門

select d.* from department d,employee e where e.departmentid=d.id and e.name='趙六';

2. 多對多

創建老師表

create table teacher

(

id int primary key auto_increment,

name varchar(20)

);

添加三個老師

insert into teacher(name) values ('老方'),('老余'),('老畢');

create table student

(

id int primary key auto_increment,

name varchar(20)

);

添加三個學生

insert into student(name) values('大毛'),('二毛'),('三毛'),('四毛'),('五毛'),('六毛'),('七毛'),('八毛'),('小毛');

創建中間表描述關系

create table tea_stu

(

teaid int,

stuid int,

primary key(teaid,stuid),

constraint teaid_FK foreign key(teaid) references teacher(id),

constraint stuid_FK foreign key(stuid) references student(id)

);

添加數據

insert into tea_stu (teaid,stuid) values (1,1),(1,2),(1,4),(1,5),(1,6),(1,8),(2,1),(2,3),(2,5),(2,7),(2,9),(3,2),(3,3),(3,4),

(3,5),(3,6),(3,7),(3,8);

查詢2號老師教過的學生

select s.* from student s,tea_stu ts where ts.stuid=s.id and ts.teaid=2;

查詢老余教過的所有的學生

select s.* from student s,tea_stu ts,teacher t where ts.stuid=s.id and ts.teaid=t.id and t.name='老余';

多表聯合查詢

查詢的結果為笛卡爾集

n張表聯合查需要n-1個條件來去掉廢數據

去掉廢數據的條件 參照表的外鍵列=被參照表的主鍵列

再加上查詢條件即可得到結果

3. 一對一

create table person
(
    id int primary key auto_increment,
    name varchar(20)
);

create table idcard
(
    id int primary key,
    location varchar(20),
    constraint personid_FK foreign key(id) references person(id)
);

insert into person (name) values('zhangsan');
insert into person (name) values('lisi');

insert into idcard (id,location) values(2,'天津');

insert into idcard (id,location) values(1,'上海');

查李四的身份證
select idcard.* from person,idcard where idcard.id=person.id and person.name='lisi';

附件:mysql安裝圖解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM