日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Database_数据库基础笔记整理

發布時間:2024/3/12 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Database_数据库基础笔记整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Database_數據庫基礎:

1. 基礎SQL語句

1.1 向'成員列表'中新增一個'用戶名為 'test','真實姓名'為'測試賬戶','性別' 為 '女'的記錄

INSERT INTO sys_user (account,realname,gender) VALUE ('test','測試用戶','f');

1.2 查詢'成員列表'頁面中總共有多少條記錄?

SELECT COUNT(*) FROM sys_user;

1.3 查詢'成員列表'中前3條記錄?

SELECT * FROM sys_user LIMIT 3;

1.4 查詢'成員列表'中第2條記錄?

SELECT * FROM sys_user LIMIT 1,1;

1.5 按照'成員列表'中'編號'的降序排序,顯示所有的記錄信息

SELECT * FROM sys_user ORDER BY id DESC;

1.6 查詢'成員列表'中'用戶名'為'test'的記錄信息,只需要顯示'編號','用戶名','真實姓名'字段信息

SELECT id,account,realname FROM sys_user WHERE account = 'test';

1.7 查詢'成員列表'中'用戶名'為'hello',并且"性別"為女的記錄

SELECT * FROM sys_user WHERE account='hello' AND gender='f';

1.8 查詢'成員列表'中'真實姓名'姓'張'的所有成員的"真實姓名"和"性別"

SELECT realname,gender FROM sys_user WHERE realname LIKE '張%';?

1.9 隨意構造一張符合要求的表,編寫SQL語句:按照部門編號升序方式顯示,查詢每個部門的平均身高,部門"Market"不用查詢

-- * 代表所有的字段 -- select后跟的是字段名; from后跟的是表名 SELECT * FROM sys_user ;-- 查詢XXXX‘成員列表’中所有的‘編號’ SELECT id FROM sys_user ;-- 查詢XXXX‘成員列表’中所有的‘編號’,'真實姓名' SELECT id,realname FROM sys_user ;-- 創建數據庫 CREATE DATABASE b ;-- 創建表 USE a ; CREATE TABLE c1( id INT(4), NAME CHAR(20), age INT(3));-- 查看表結構 DESC c1 ;-- 查詢 SELECT * FROM c1 ;-- 插入數據 INSERT INTO c1 VALUE ('1','zhangsan','18'); INSERT INTO c1(id,NAME) VALUE ('2','lisi');-- 增、刪、改、查 -- 改 UPDATE c1 SET NAME = 'zhangsanfeng' WHERE id = '1' ; UPDATE c1 SET NAME = 'wangwu',age = '20' WHERE NAME = 'lisi' ;-- 刪除 DELETE FROM c1 WHERE id = '2' ;-- 清空表數據 TRUNCATE c1 ;-- 去重 SELECT DISTINCT * FROM c1 ;-- 給表c1添加主鍵(設置id為主鍵) -- 主鍵是唯一的,不能重復 ALTER TABLE c1 ADD PRIMARY KEY(id) ; DESC c1 ;-- 查詢XXXX’成員列表‘前3條記錄 SELECT * FROM sys_user LIMIT 3; SELECT * FROM sys_user LIMIT 0,3;-- 查詢XXXX’成員列表‘第2條和第3條記錄 SELECT * FROM sys_user LIMIT 1,2;-- 查詢’編號‘為1,并且’用戶名‘為'admin'的記錄 SELECT * FROM sys_user WHERE id = '1' AND account = 'admin' ;-- 查詢’編號‘為1的記錄 和 ‘用戶名’為'zhangsan'的記錄 SELECT * FROM sys_user WHERE id = '1' OR account = 'zhangsan' ;-- 將‘編號’為1,2,3的記錄都查詢出來 SELECT * FROM sys_user WHERE id = '1' OR id = '2' OR id = '3' ; SELECT * FROM sys_user WHERE id IN ('1','2','3') ;-- 將‘編號’除了1,2,3以外的所有記錄都查詢出來 SELECT * FROM sys_user WHERE id NOT IN ('1','2','3') ;-- 查詢‘編號’大于1,小于500的所有記錄 SELECT * FROM sys_user WHERE id > 1 AND id < 500 ;-- 查詢‘編號’大于等于10,小于等于500的所有記錄 SELECT * FROM sys_user WHERE id >= 1AND id <= 500 ;-- between .. and .. SELECT * FROM sys_user WHERE id BETWEEN 1 AND 500 ;-- 將‘真實姓名’姓‘張’的所有記錄都查詢出來 -- 模糊查詢 SELECT * FROM sys_user WHERE realname LIKE '張%' ;-- 將‘真實姓名’姓‘張*’的所有記錄都查詢出來 -- _ 代表1個 SELECT * FROM sys_user WHERE realname LIKE '張_' ;-- 按照’編號‘降序方式顯示’成員列表‘中所有的記錄 -- order by 排序 -- desc 降序 -- asc 升序,默認就是升序,可以不用寫 -- 創建表USE a;CREATE TABLE c4(id INT(4),market CHAR(20),heigh INT(8));INSERT INTO c4 (id,market,heigh) VALUE ('23','a','167');INSERT INTO c4 (id,market,heigh) VALUE ('34','a','162');INSERT INTO c4 (id,market,heigh) VALUE ('13','b','187');INSERT INTO c4 (id,market,heigh) VALUE ('42','b','176');SELECT * FROM c4;SELECT AVG(heigh) FROM c4 GROUP BY market; -- 查詢表中所有的數據(中間有空格)/*多行注釋,*代表所有的字段*/SELECT * FROM sys_user;SELECT id FROM sys_user;SELECT PASSWORD FROM sys_user;SELECT dept FROM sys_user;SELECT realname FROM sys_user;-- 創建數據庫CREATE DATABASE A;CREATE DATABASE b;-- 創建表USE a;CREATE TABLE c1(id INT(4),NAME CHAR(20),age INT(3));-- 查看表結構DESC c1;SELECT * FROM c1; -- 查詢INSERT INTO c1 (id,NAME) VALUE ('2','lisi'); -- 插入數據INSERT INTO c1 (id,NAME) VALUE ('3','lisi-1'); -- 插入數據INSERT INTO c1 (id,NAME) VALUE ('4','lisi-2'); -- 插入數據INSERT INTO c1 (id,NAME) VALUE ('5','lisi-3'); -- 插入數據-- 增、刪、改、查UPDATE c1 SET NAME = 'zhangsan' WHERE id ='1';UPDATE c1 SET NAME = 'lixiaosi',age='20' WHERE id ='2';DELETE FROM c1 WHERE id = '2';-- 清空表數據TRUNCATE c1;SELECT * FROM c1; -- 查詢-- 去重SELECT DISTINCT * FROM c1;-- 創建表 添加主鍵USE a;CREATE TABLE c2(id INT(4),NAME CHAR(20),age INT(3));-- 給表2添加主鍵 將ID設置為主鍵ALTER TABLE c2 ADD PRIMARY KEY(id);INSERT INTO c2 (id,NAME) VALUE ('3','lisi-3'); -- 插入數據INSERT INTO c2 (id,NAME) VALUE ('4','lisi-4'); -- 插入數據INSERT INTO c2 (id,NAME) VALUE ('5','lisi-5'); -- 插入數據INSERT INTO c2 (id,NAME) VALUE ('6','lisi-6'); -- 插入數據INSERT INTO c2 (id,NAME) VALUE ('7','lisi-7'); -- 插入數據INSERT INTO c2 (id,NAME) VALUE ('8','lisi-8'); -- 插入數據SELECT * FROM c2;USE ranzhi;-- select * from sys_user where id =1 or id =2 or id=3;SELECT * FROM sys_user LIMIT 3; -- 顯示前三行SELECT * FROM sys_user LIMIT 1,2; -- 顯示第二行,第三行SELECT * FROM sys_user;SELECT * FROM sys_user WHERE id='1' AND account ='ranzhi';SELECT * FROM sys_user WHERE id='1' OR account ='lisansan';SELECT * FROM sys_user WHERE id='1' OR id='2' OR id='3';SELECT * FROM sys_user WHERE id IN('1','2');SELECT * FROM sys_user WHERE id IN('1','2','3');SELECT * FROM sys_user WHERE id >'1' AND id <'4';SELECT * FROM sys_user WHERE id >='1' AND id <='4';SELECT * FROM sys_user WHERE id BETWEEN 1 AND 4;SELECT * FROM sys_user WHERE id NOT IN('1','2');SELECT * FROM sys_user;SELECT * FROM sys_user WHERE realname LIKE '李%'; -- 模糊查詢SELECT * FROM sys_user WHERE realname LIKE '李_';SELECT * FROM sys_user ORDER BY id DESC; -- 降序SELECT * FROM sys_user ORDER BY id ASC; ?-- 升序SELECT * FROM sys_user ORDER BY realname DESC;-- 幾個常用的函數-- 查詢列表中總共有多少條記錄SELECT COUNT(*) FROM sys_user;-- 求和-- 查詢成員列表中所有編號之和SELECT SUM(id) FROM sys_user;SELECT MAX(id) FROM sys_user; -- 最大值SELECT MIN(id) FROM sys_user; -- 最小值SELECT AVG(id) FROM sys_user; -- 平均值USE a;CREATE TABLE c3(id INT(4),NAME CHAR(200),score INT(8))SELECT * FROM c3; -- 查詢INSERT INTO c3 VALUE ('1','zhangsan','39'); -- 插入數據INSERT INTO c3 VALUE ('1','zhangsan','40'); -- 插入數據INSERT INTO c3 VALUE ('1','zhangsan','60'); -- 插入數據INSERT INTO c3 VALUE ('2','lisi','44'); -- 插入數據INSERT INTO c3 VALUE ('2','lisi','58'); -- 插入數據INSERT INTO c3 VALUE ('2','lisi','50'); -- 插入數據SELECT DISTINCT NAME FROM c3; -- 去重SELECT NAME,SUM(score) FROM c3 WHERE NAME = 'zhangsan';SELECT NAME,SUM(score) FROM c3 GROUP BY id; -- 分組SELECT id,NAME,SUM(score) FROM c3 WHERE NAME = 'lisi';SELECT id,NAME,SUM(score) FROM c3 WHERE NAME = 'zhangsan';SELECT NAME,SUM(score) FROM c3 GROUP BY id HAVING NAME = 'lisi';SELECT id,SUM(score) FROM c3 GROUP BY id HAVING id = '1';SELECT * FROM sys_user;-- DELETE FROM sys_user WHERE id = '5';INSERT INTO sys_user (account,realname,gender) VALUE ('test','測試用戶','f'); -- 插入數據INSERT INTO sys_user (account,realname,gender) VALUE ('hello','測試用戶','f'); -- 插入數據SELECT COUNT(*) FROM sys_user;SELECT * FROM sys_user LIMIT 3; -- 顯示前三行SELECT * FROM sys_user LIMIT 1,1;SELECT * FROM sys_user ORDER BY id DESC; -- 降序SELECT id,account,realname FROM sys_user WHERE account = 'test';SELECT * FROM sys_user WHERE account='hello' AND gender='f';SELECT realname,gender FROM sys_user WHERE realname LIKE '李%';-- 創建表USE a;CREATE TABLE c4(id INT(4),market CHAR(20),heigh INT(8));INSERT INTO c4 (id,market,heigh) VALUE ('23','a','167');INSERT INTO c4 (id,market,heigh) VALUE ('34','a','162');INSERT INTO c4 (id,market,heigh) VALUE ('13','b','187');INSERT INTO c4 (id,market,heigh) VALUE ('42','b','176');SELECT * FROM c4;SELECT AVG(heigh) FROM c4 GROUP BY market;/*DELETE FROM c4 WHERE id = '23';DELETE FROM c4 WHERE id = '34';DELETE FROM c4 WHERE id = '13';DELETE FROM c4 WHERE id = '42';*/SELECT * FROM sys_user ORDER BY id DESC ;SELECT * FROM sys_user ORDER BY id ASC;-- 分組SELECT NAME, SUM(score) FROM c2 GROUP BY id ;-- Q: ?查詢’zhangsan'這個人的‘編號’及總成績SELECT id, SUM(score) FROM c2 WHERE NAME = 'zhangsan' ;SELECT NAME, SUM(score) FROM c2 GROUP BY id HAVING NAME = 'zhangsan';

2. 優化查詢速率

2.1 避免全表掃描,請勿使用*號,以防返回大量的數據;

2.2 避免使用!=或<>操作符在where子句中,避免全表掃描:

2.3?請勿在where子句中將表達式或函數放在比較符號的左側,以防全表掃描;

例:xx where score + 10 > 60;

優化:xx where score > 60 – 10;

2.4 使用limit限制查詢返回的數據行數,限制不需要的數據;

2.5 使用between、exists、not exists代替in或not in,同時避免系統無法使用索引;

? ? ? 推薦使用join代替子查詢;

例:xx where score in (60,99);

優化:xx where score between 60 and 99;

2.6 使用union或union all代替or;

例:xx where score = 60 or score = 99;

優化:xx where score = 60 union xx where score = 99;

3. 多表查詢

-- dept(dept_id,dept_name,employ_name,employ_sg) select dept_name,avg(employ_sg) from dept where employ_name <> 'Market' group by employ_name order by dept_id asc; select dept_name,avg(employ_sg) from dept group by employ_name having employ_name <> 'Market' order by dept_id asc;

4. 牛刀小試

4.1 創建表數據

use test;CREATE TABLE test.Student(Sid VARCHAR(10),Sname VARCHAR(10),Sage DATETIME,Ssex NVARCHAR(10));INSERT INTO Student VALUES('01' , '趙雷' , '1990-01-01' , '男');INSERT INTO Student VALUES('02' , '錢電' , '1990-12-21' , '男');INSERT INTO Student VALUES('03' , '孫風' , '1990-05-20' , '男');INSERT INTO Student VALUES('04' , '李云' , '1990-08-06' , '男');INSERT INTO Student VALUES('05' , '孫風' , '1991-12-01' , '男');INSERT INTO Student VALUES('06' , '吳蘭' , '1992-03-01' , '女');INSERT INTO Student VALUES('07' , '鄭竹' , '1989-07-01' , '女');INSERT INTO Student VALUES('08' , '王菊' , '1990-01-20' , '女');CREATE TABLE test.Course(Cid VARCHAR(10),Cname VARCHAR(10),Tid VARCHAR(10));INSERT INTO Course VALUES('01' , '語文' , '02');INSERT INTO Course VALUES('02' , '數學' , '01');INSERT INTO Course VALUES('03' , '英語' , '03');CREATE TABLE test.Teacher(Tid VARCHAR(10),Tname VARCHAR(10));INSERT INTO Teacher VALUES('01' , '張三');INSERT INTO Teacher VALUES('02' , '李四');INSERT INTO Teacher VALUES('03' , '王五');CREATE TABLE test.SC(Sid VARCHAR(10),Cid VARCHAR(10),score DECIMAL(18,1));INSERT INTO SC VALUES('01' , '01' , 80);INSERT INTO SC VALUES('01' , '02' , 90);INSERT INTO SC VALUES('01' , '03' , 99);INSERT INTO SC VALUES('02' , '01' , 70);INSERT INTO SC VALUES('02' , '02' , 60);INSERT INTO SC VALUES('02' , '03' , 80);INSERT INTO SC VALUES('03' , '01' , 80);INSERT INTO SC VALUES('03' , '02' , 80);INSERT INTO SC VALUES('03' , '03' , 80);INSERT INTO SC VALUES('04' , '01' , 50);INSERT INTO SC VALUES('04' , '02' , 30);INSERT INTO SC VALUES('04' , '03' , 20);INSERT INTO SC VALUES('05' , '01' , 76);INSERT INTO SC VALUES('05' , '02' , 87);INSERT INTO SC VALUES('06' , '01' , 31);INSERT INTO SC VALUES('06' , '03' , 34);INSERT INTO SC VALUES('07' , '02' , 89);INSERT INTO SC VALUES('07' , '03' , 98);

4.2 題目

4.2.1 查詢姓“張”的老師的個數;

SELECT COUNT(*) FROM teacher WHERE Tname LIKE '張%';

4.2.2 查詢男生、女生人數;

SELECT COUNT(*) AS 男 FROM Student WHERE Ssex='男';SELECT COUNT(*) AS 女 FROM Student WHERE Ssex='女';

4.2.3 查詢所有同學的學號、姓名、選課數、總成績;

SELECT Student.Sid AS 學號,Student.Sname AS 姓名,COUNT(sc.Cid) AS 選課數, SUM(sc.score) AS 總成績 FROM Student LEFT JOIN sc ON Student.Sid=sc.Sid GROUP BY Student.Sid;

?

?

4.2.4 查詢平均成績大于60 分的同學的學號和平均成績;

SELECT * FROM (SELECT Student.Sid AS 學號,AVG(sc.score) AS 平均成績 FROM Student LEFT JOIN sc ON Student.Sid=sc.Sid GROUP BY Student.Sid)cc WHERE cc.平均成績>60;

?

5. 部分問答

5.1 觸發器的作用?

答:觸發器是一種特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。

5.2 什么是存儲過程?用什么來調用?

答:存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程。

5.3 索引的作用?和它的優點缺點是什么?

答:索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。

5.4 什么是內存泄漏?

答:一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中為其分配的,大小任意的,使用完后要顯示釋放內存。當應用程序用關鍵字new等創建對象時,就從堆中為它分配一塊內存,使用完后程序調用free或者delete釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。

5.5 維護數據庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什么?

答:我是這樣做的,盡可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什么業務系統訪問數據庫都可以保證數據的完整性和一致性。最后考慮的是自寫業務邏輯,但這樣做麻煩,編程復雜,效率低下。

5.6 什么是事務?什么是鎖?

答:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態,或者是上有個節點。為了確保要么執行,要么不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

鎖:在數據庫管理系統(Database Management System)中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和并發性。與現實生活中鎖一樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。

5.7 什么叫視圖?游標是什么?

答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。

游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理數據的時候,游標顯得十分重要。

總結

以上是生活随笔為你收集整理的Database_数据库基础笔记整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。