SQL總結

1、SQL

Structured Query Language 結構化查詢語言mysql

做用:與數據庫進行交互面試

知識擴展:sql

SQL標準,由ANSI(美國標準學會,屬於ISO的核心成員)進行管理和維護的。shell

數據庫廠商都支持該標準,並進行了擴展。擴展的部分,通常稱之爲方言。數據庫

 

SQL標準和方言:普通話和方言。windows

2、經常使用的數據庫

一、Oracle服務器

二、DB2函數

三、MySQL編碼

四、SQL Serverspa

3、安裝MySQL

驗證是否安裝成功:

登陸數據庫:

shell>mysql -u root -p

 

4、數據庫的基本概念:

知識點:使用關鍵字做爲表名或數據庫名或字段名,使用``(反引號)引發來

約定:shell>命令 windows命令

  mysql>命令 mysql命令或語句

 

 

User類對應User表結構,類中的屬性映射爲表中的列

User對象對應User表中的一條記錄

5、SQL語句的分類:

*DDLData Definition Language數據定義語言

*DMLData Manipulation Language 數據操做語言

DCLData Control Language 數據控制語言

*DQLData Query Language 數據查詢語言

*TPL:事務處理語言

 

6、DDL:數據定義語言

做用:定義數據庫或表結構用的

關鍵字:CREATE ALTER DROP

6.1數據庫結構操做:

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

 

建立一個名稱爲mydb1的數據庫。

mysql>CREATE DATABASE mydb1;       (字符集採用數據庫默認的--安裝時的那個)

查看數據庫的建立細節

mysql>SHOW CREATE DATABASE mydb1;

查看當前全部的數據庫

mysql>SHOW DATABASES;

建立一個使用gbk字符集的mydb2數據庫。

mysql>CREATE DATABASE mydb2 CHARACTER SET gbk;

建立一個使用utf8字符集,並帶校對規則的mydb3數據庫。

mysql>CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_general_ci;

查看當前數據庫服務器中的全部數據庫

mysql>SHOW DATABASES;

查看前面建立的mydb2數據庫的定義信息

mysql>SHOW CREATE DATABASE mydb2;

刪除前面建立的mydb1數據庫

mysql>DROP DATABASE mydb1;

查看服務器中的數據庫,並把mydb2的字符集修改成utf8;

mysql>ALTER DATABASE mydb2 CHARACTER SET utf8;

 

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

6.2表結構操做

建立表以前要先選擇數據庫。

選擇數據庫

mysql>USE mydb2;

建立一個員工表

mysql>CREATE TABLE employee(

id int,

name varchar(100),

gender varchar(10),

birthday date,

entry_date date,

job varchar(100),

salary float(8,2),

resume text

);

查看當前數據庫中的全部表

mysql>SHOW TABLES;

查看錶的建立細節

mysql>SHOW CREATE TABLE employee;

在上面員工表的基本上增長一個image列。

mysql>ALTER TABLE employee ADD image blob;

修改job列,使其長度爲60

mysql>ALTER TABLE employee MODIFY job varchar(60);

刪除image列。

mysql>ALTER TABLE employee DROP image;

表名改成user

mysql>RENAME TABLE employee TO user;

修改表的字符集爲utf8

mysql>ALTER TABLE user CHARACTER SET gbk;

列名name修改成username

mysql>ALTER TABLE user CHANGE name username varchar(100);

 

7、DML:數據操做語言

做用:操做的是表中的記錄(數據)

關鍵字:INSERT UPDATE DELETE

 

MySQL:

字符串類型   使用單引號引發來   ‘abcdefg’

日期時間  使用單引號引發來   ‘2001-01-08’

特殊值   null

 

7.1插入數據

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

user表中插入三條員工信息

mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES(1,'zhw','male','1990-08-09','2014-03-29','CTO',10000,'description');

mysql>INSERT INTO user VALUES(2,'hch','female','1989-08-09','2014-03-29','CEO',10000,'aaaaaa');

mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES(3,'皇甫張軍','male','1990-08-09','2014-03-29','UFO',10000,'帥鍋一枚');

 

 

 

 

告知服務器客戶端使用的編碼爲gbk

mysql>set character_set_client=gbk;

告知服務器客戶端查看結果集用的編碼爲gbk

mysql>set character_set_results=gbk;

 

 

7.2更新數據

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

 

將全部員工薪水修改成5000元。

mysql>UPDATE user SET salary=5000;

將姓名爲zhw’的員工薪水修改成3000元。

mysql>UPDATE user SET salary=3000 WHERE username=’zhw’;

將姓名爲hch’的員工薪水修改成4000,job改成ccc

mysql>UPDATE user SET salary=4000,job=’ccc’ WHERE username=’hch’;

將」皇甫張軍」的薪水在原有基礎上增長1000元。

mysql>UPDATE user SET salary=salary+1000 where username=’皇甫張軍’;

 

7.3刪除數據

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

刪除表中名稱爲zhw’的記錄。

msyql>DELETE FROM user WHERE username=’zhw’;

刪除表中全部記錄。

方式一:

mysql>DELETE FROM user;

方式二:(屬於DDL語句)

mysql>TRUNCATE TABLE user; 把整張表格摧毀,而後重建的表結構。這比一行一行的刪除行要快不少

 

8、DQL:數據查詢語言

做用:查詢

關鍵字:SELECT

8.1簡單查詢

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

查詢表中全部學生的信息。

mysql>SELECT * FROM student;

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

mysql>SELECT name,english FROM student;   (投影查詢)

過濾表中重複數據。

msyql>SELECT DISTINCT english FROM student;

在全部學生數學分數上加10分特長分。

mysql>SELECT name,math+10 FROM student;

統計每一個學生的總分。

mysql>SELECT name,chinese+english+math FROM student;

使用別名表示學生分數。

mysql>SELECT name AS 姓名,chinese+english+math 總分 FROM student;

 

查詢姓名爲王五的學生成績

msyql>SELECT * FROM student WHERE name='王五';

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

mysql>SELECT * FROM student WHERE english>90;

查詢總分大於200分的全部同窗

mysql>SELECT * FROM student WHERE (chinese+english+math)>200;

 

查詢英語分數在 8090之間的同窗。

mysql>SELECT * FROM student WHERE english BETWEEN 80 AND 90;

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

mysql>SELECT * FROM student WHERE math IN (89,90,91);

查詢全部姓李的學生成績。

mysql>SELECT * FROM student WHERE name LIKE ‘%’;

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

mysql>SELECT * FROM student WHERE math>80 AND chinese>80;

 

 

對數學成績排序後輸出。

mysql>SELECT name,math FROM student ORDER BY math;

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

mysql>SELECT name,chinese+english+math FROM student ORDER BY chinese+english+math DESC;

對姓李的學生語文成績排序輸出(由高到低)

msyql>SELECT name,chinese FROM student WHERE name LIKE ‘%’ ORDER BY chinese DESC;

 

9、數據完整性

一、數據完整性是爲了保證插入到數據中的數據是正確的,它防止了用戶可能的輸入錯誤

二、分爲三類

l 實體完整性

l 域完整性

l 參照完整性

9.1實體完整性

規定表的一行(即每一條記錄)在表中是惟一的實體。實體完整性經過表的主鍵來實現

 

主鍵的特色:不能爲null,必須有值,且不能重複。

主鍵分類:

邏輯主鍵:不表明實際意義,只是區分不一樣記錄用的。好比id

業務主鍵:表明者具體的實際意義。好比身份證號  用戶名

CREATE TABLE t2(

id int PRIMARY KEY,#PRIMARY KEY 聲明id是主鍵

name varchar(100)

);

 

CREATE TABLE t4(

id int,

name varchar(100),

PRIMARY KEY(id)

);

 

 

CREATE TABLE t3(

id int PRIMARY KEY auto_increment,#auto_increment 數據庫自動增加

name varchar(100)

);

 

9.2域完整性

指數據庫表的列(即字段)必須符合某種特定的數據類型或約束。

 

非空約束:not null

惟一約束:unique

 

CREATE TABLE t6(

id int PRIMARY KEY auto_increment,

username varchar(100) not null unique, 非空和惟一約束

gender varchar(10) not null  非空約束

);

9.3參照完整性(多表)

表間的關係:

一對多(用的最多)

多對多(用的不少)

一對一(幾乎不用)

 

9.3.1一對多:部門和員工的關係

CREATE TABLE department(

id int primary key,

name varchar(100)

);

 

CREATE TABLE employee(

id int primary key,

name varchar(100),

salary float(8,2),

department_id int,

CONSTRAINT department_id_fk FOREIGN KEY(department_id) REFERENCES department(id)

);

 

 

 

9.3.2多對多:老師和學員

CREATE TABLE teacher(

id int primary key,

name varchar(100),

salary float(8,2)

);

CREATE TABLE student(

id int primary key,

name varchar(100),

grade varchar(10)

);

CREATE TABLE teacher_student(

t_id int,

s_id int,

CONSTRAINT t_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),

CONSTRAINT s_id_fk FOREIGN KEY(s_id) REFERENCES student(id),

PRIMARY KEY(t_id,s_id)

);

 

 

9.3.3一對一(瞭解)

l 按照外鍵關聯:

CREATE TABLE person(

id int primary key,

name varchar(100)

);

CREATE TABLE idcard(

id int primary key,

number varchar(20),

person_id int unique,

CONSTRAINT person_id_fk FOREIGN KEY(person_id) REFERENCES person(id)

);

 

 

l 按照主鍵關聯:

CREATE TABLE person(

id int primary key,

name varchar(100)

);

CREATE TABLE idcard(

id int primary key,

number varchar(20),

CONSTRAINT person_id_fk FOREIGN KEY(id) REFERENCES person(id)

);

 

 

10、DQL:數據查詢複雜的(多表)

10.1鏈接查詢(面試概率很大)

 

基本語法形式:FROM 1 鏈接類型 表2 [on 鏈接條件][where 篩選條件]

約定:表1在鏈接類型的左邊,稱之爲左表

  2在鏈接類型的右邊,稱之爲右表

 

交叉鏈接:cross join

返回左表和右表的笛卡爾積(左表5條記錄 ,右表6條記錄 5*6=30條)

select * from customer,orders;(隱式交叉鏈接)

select * from customer cross join orders;(顯式交叉鏈接)

內鏈接:inner join

返回知足鏈接條件的全部記錄。

隱式內鏈接:(不使用inner join關鍵字)

select c.*,o.* from customer c,orders o where c.id=o.customer_id;

顯式內鏈接:(使用inner join關鍵字)

select * from customer c inner join orders o on c.id=o.customer_id;

 

外鏈接:outer join

左外鏈接:left outer join=left join

返回知足鏈接條件的全部記錄,同時返回左表中剩餘的其餘記錄

查詢全部客戶,有訂單的把訂單也顯示出來

select * from customer c left outer join orders o on c.id=o.customer_id;

 

右外鏈接:right outer join=right join

返回知足鏈接條件的全部記錄,同時返回右表中剩餘的其餘記錄

查詢全部訂單,同時打印訂單所屬的客戶

select * from customer c right outer join orders o on c.id=o.customer_id;

 

10.2子查詢

子查詢也叫嵌套查詢,是指在select子句或者where子句中又嵌入select查詢語句

查詢「陳冠希」的全部訂單信息

 

select id from customer where name=’陳冠希’;

select * from orders where customer_id=1;

 

子查詢:

select * from orders where customer_id=(select id from customer where name=’陳冠希’);

 

10.3聯合查詢

union關鍵字。

聯合查詢可以合併兩條查詢語句的查詢結果,去掉其中的重複數據行,而後返回沒有重複數據行的查詢結果

SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;

 

10.4報表查詢(使用數據庫提供的函數)

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

msyql>SELECT COUNT(*) FROM student;

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

mysql>SELECT COUNT(*) FROM student WHERE math>90;

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

mysql>SELECT COUNT(*) FROM student WHERE (chinese+english+math)>250;

 

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

mysql>SELECT SUM(math) FROM student;

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

mysql>SELECT SUM(chinese),SUM(english),SUM(math) FROM student;

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

mysql>SELECT SUM(chinese+english+math) FROM student;

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

mysql>SELECT SUM(chinese)/COUNT(*) FROM student;

 

求一個班級數學平均分?

mysql>SELECT AVG(math) FROM student;

求一個班級總分平均分

mysql>SELECT AVG(chinese+english+math) FROM student;

 

求班級語文最高分和數學最低分

mysql>SELECT MAX(chinese) FROM student;

mysql>SELECT MIN(math) FROM student;

 

 

 

對訂單表中商品歸類後,顯示每一類商品的總價

mysql>SELECT product,SUM(price) FROM orders GROUP BY product;

查詢購買了幾類商品,而且每類總價大於100的商品

mysql>SELECT product,SUM(price) FROM orders GROUP BY product HAVING SUM(price)>100;

 

11、MySQL數據庫的備份與恢復

一、備份

 

二、恢復
前提:必須先建立數據庫的名稱

方式一:進入MySQL

 

方式二:不用進入MySQL

相關文章
相關標籤/搜索