您好,登錄后才能下訂單哦!
下文主要給大家帶來數據庫知識和spl語句相關講義,希望數據庫知識和spl語句相關講義能夠帶給大家實際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
下邊把來實現一下一些語句。
-- 寫sql語句,發送給服務端執行
-- 在后面可以寫注釋
-- 創建庫,day16
CREATE DATABASE day16 DEFAULT CHARACTER SET utf8;
-- 使用day16這個數據庫
USE day16;
-- 查詢day16這個庫中的所有的表
SHOW TABLES;
-- 需求:創建學生表(id,name,age)
CREATE TABLE student(
-- 字段名稱 字段類型
id INT,
NAME VARCHAR(20),
age INT
);
-- 查詢表中的數據
SELECT * FROM student;
-- 查詢一個表結構
DESC student;
-- 刪除student表
DROP TABLE student;
-- 添加一個地址字段(gender varchar(2))
ALTER TABLE student ADD COLUMN gender VARCHAR(2);
-- 修改gender字段類型為varchar(3)
ALTER TABLE student MODIFY COLUMN gender VARCHAR(3);
-- 將gender字段修改為sex字段 varchar(2)
ALTER TABLE student CHANGE COLUMN gender sex VARCHAR(2);
-- 添加一個地址字段
ALTER TABLE student ADD COLUMN address VARCHAR(20);
-- 刪除sex和address字段
ALTER TABLE student DROP COLUMN sex,DROP COLUMN address;
-- 將student這個表的表名改為stu
ALTER TABLE stu RENAME TO student;
-- 查看表的數據
-- select 字段名稱(如果查詢所有字段*) from student;
-- 查看表數據
SELECT * FROM student;
-- 給表中插入3條數據(插入所有字段)
INSERT INTO student VALUES(1,'劉德華',50,'中國香港');
INSERT INTO student VALUES(2,'陳奕迅',40,'中國香港');
INSERT INTO student VALUES(3,'韓紅',50,'河北');
-- 當需要插入所有字段的時候我們可以直插入部分字段嗎?插入不了
INSERT INTO student VALUES(1,'成龍',60,'中國香港');
-- 指向給表中只想插入id字段和name字段,請問怎么辦?
INSERT INTO student(id,NAME) VALUES(4,'郭德綱');
-- 將所有學生的年齡改為50歲,修改所有學生的年齡,用的非常少
UPDATE student SET age=50;
-- 將id為3的學生姓名改為房祖名
UPDATE student SET NAME='房祖名' WHERE id=3;
-- 修改多個字段,修改id為2的學生姓名為張學友,年齡改為60
UPDATE student SET NAME='張學友',age=60 WHERE id=2;
-- 刪除全表數據,本質上是一條一條進行刪除的,效率比較慢
DELETE FROM student;
-- 刪除id為3的數據
DELETE FROM student WHERE id=3;
-- 使用truncate table 表名,刪除全表數據,并不是一條條刪,而是直接將全表數據刪除,效率比較快
TRUNCATE TABLE student;
-- delete from和truncate table 這兩種刪除全表的方式有什么區別呢?
-- 1.delete from一條條刪除,truncate table直接將全表數據干掉
-- 2.delete from可以按條件刪除一條數據,truncate table只能刪除全表數據,不能按照條件刪除
-- 3.delete from無法重置自增長主鍵,truncate table可以重置自增長主鍵
-- 查詢數據
-- 查詢所有列
SELECT * FROM student;
-- 查詢指定字段,查詢id,name
SELECT id,NAME FROM student;
-- 查詢時指定別名,name--姓名,address--住址
SELECT NAME AS '姓名',address AS '住址' FROM student;
-- 上面指定別名的as是可以省略的
SELECT NAME '姓名' FROM student;
-- 添加servlet,jsp字段
ALTER TABLE student ADD COLUMN servlet INT,ADD COLUMN jsp INT;
-- 給每條學生數據添加上servlet和jsp的成績
UPDATE student SET servlet=50,jsp=60 WHERE id=1;
UPDATE student SET servlet=60,jsp=70 WHERE id=2;
UPDATE student SET servlet=70,jsp=80 WHERE id=3;
-- 合并servlet和jsp這兩個列進行查詢,查詢每個學生的servlet和jsp的成績總和
-- 合并列查詢有一個特點:只能合并數值類型的字段
SELECT NAME '姓名',(servlet+jsp) '總成績' FROM student;
-- 查詢時添加常量列,給student表添加一個常量列 班級--java001
SELECT NAME '姓名',address '地址','java001' AS '班級' FROM student;
-- 查詢你們班的學生都來自于哪里
SELECT NAME '姓名',address '地址' FROM student;
-- 去除重復值來查詢每一個學生來自于哪里
SELECT DISTINCT address FROM student;
-- 去除重復值的另一種寫法
SELECT DISTINCT(address) FROM student;
-- 查詢id為1并且,并且servlet成績等于50的學生(交集 and)
SELECT * FROM student WHERE id=1 AND servlet=50;
-- 查詢id為1或者來自中國香港的學生(并集 or)
SELECT * FROM student WHERE id=1 OR address='中國香港';
-- 查詢servlet成績大于60分的學生
SELECT * FROM student WHERE servlet>60;
-- 查詢jsp成績小于等于70的學生
SELECT * FROM student WHERE jsp<=70;
-- 另一種寫法
SELECT * FROM student WHERE jsp<70 OR jsp=70;
-- 查詢jsp的成績大于等于70并且小于等于80的學生
SELECT * FROM student WHERE jsp<=80 AND jsp>=70;
-- 上面寫法的另一種語法,between...and...包前也包后
SELECT * FROM student WHERE jsp BETWEEN 70 AND 80;
-- 查詢學生年齡不等于30歲的學生
SELECT * FROM student WHERE age<>30;
-- 給student表中添加一個數據
INSERT INTO student VALUES(4,'郭德綱',NULL,'',80,90);
-- 查詢age字段為null的學生(IS NULL)
SELECT * FROM student WHERE age IS NULL;
-- 查詢address字段為空字符串的學生(='')
SELECT * FROM student WHERE address='';
-- 查詢age字段不為null的學生(is not null)
SELECT * FROM student WHERE age IS NOT NULL;
-- 查詢address字段不為''的學生(<>'')
SELECT * FROM student WHERE address<>'';
-- 模糊查詢(like),like后面跟的是符號
-- %任意多個字符
-- _一個字符
-- 查詢姓劉的學生(like '劉%')
SELECT * FROM student WHERE NAME LIKE '劉%';
-- 查詢姓名中含有劉這個字的學生
SELECT * FROM student WHERE NAME LIKE '%劉%';
-- 查詢姓劉,且姓名有3個字的學生
SELECT * FROM student WHERE NAME LIKE '劉__';
-- 聚合函數
-- 查詢servlet的總成績(sum -- 求和函數)
SELECT SUM(servlet) FROM student;
-- 查詢每個學生的servlet平均分(avg,平均函數)
SELECT AVG(servlet) FROM student;
-- 查詢學生的servlet的最高成績(max ,最大值函數)
SELECT MAX(servlet) FROM student;
-- 查詢所有學生的servlet的最低成績(min,求取最小值函數)
SELECT MIN(servlet) FROM student;
-- 求取這張學生表中有多少條數據(count(*))
-- 效率比較低
SELECT COUNT(*) FROM student;
-- 根據某一個字段求取學生表中的數據條數,當一個字段數值為null的時候,是不予計算的
-- 但是這種方式求取得統計值的時候效率會更高,但是有時候數據不夠準確
SELECT COUNT(age) FROM student;
-- 求取本班中香港和河北的學生分別有多少人
-- 1.給學生使用address這個字段進行分組(group by) 2.求取每一組中的學生人數
-- address count
-- 香港 2
-- 河北 1
SELECT address,COUNT(*) FROM student GROUP BY address;
-- 查詢人數大于1的地域(group by 分組字段 having 篩選條件)
SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>1;
-- 分頁查詢 limit 起始行數,查詢的條數 注意:起始行數從0開始
-- 假設我的表中有20條數據,分為4也顯示
-- 第一頁:limit 0,5
-- 第二頁:limit 5,5
-- 第三頁:limit 10,5
-- 第四頁:limit 15,5
-- 結論:查詢某一頁要現實的數據的時候可以利用如下公式 limit (當前頁數-1)*每頁顯示的條數,每頁現實的條數
-- student表中目前有4條數據,分為2頁顯示,每頁顯示2條
-- 查詢第一頁的顯示數據:
SELECT * FROM student LIMIT 0,2;
-- 查詢第二頁現實的數據
SELECT * FROM student LIMIT 2,2;
-- 按照id字段的升序進行排序
-- asc,升序,數字從小到大,字母a-z
-- desc,降序,數字從大到小,字母z-a
SELECT * FROM student ORDER BY id DESC;
-- 按照servlet的成績的降序進行排序
SELECT * FROM student ORDER BY servlet DESC;
-- 當有多個排序條件的時候,先按照第一個條件排序,如果第一個條件相同則按照第二個條件進行排序
-- 先按照學生的年齡升序進行排序,年齡相同按照學生的servelt成績的升序進行排序
SELECT * FROM student ORDER BY age ASC,servlet ASC;
DESC student;
SELECT * FROM student;
-- ------------------------------------------------------------------
-- 數據約束 :給表添加一些數據約束從而可以達到約束用戶操作數據的效果
-- 1:默認值約束(default)
-- :當給這個字段沒有添加值的時候,會給一個默認值,如果給默認值約束的字段添加的值為null的時候,那么他的字段值就為null
-- 創建一個stu表
CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
-- 給性別gender這個字段添加一個默認值約束
gender VARCHAR(2) DEFAULT '男'
);
-- 給stu表中添加幾個數據
INSERT INTO stu VALUES(1,'張三','男');
INSERT INTO stu(id,NAME) VALUES(2,'李四');
-- 給stu表中插入數據,性別為null
INSERT INTO stu VALUES(3,'劉詩詩',NULL);
-- 2.非空約束(not null),插入的字段不為null,而且必須插入數據
CREATE TABLE stu(
-- 給stu表中的id字段添加一個非空約束
id INT NOT NULL,
NAME VARCHAR(20),
gender VARCHAR(2)
);
-- 給這張表中添加一個元素,不插入id字段的值
INSERT INTO stu(NAME,gender) VALUES('郭德綱','男');
-- 給這張表添加一條數據,id字段的值直接給成null,這樣的話是插入不進去的。。
-- 唯一約束(unique)
-- 給stu表添加一個唯一約束
CREATE TABLE stu(
-- 給stu表中的id字段添加唯一約束
id INT UNIQUE,
NAME VARCHAR(20),
gender VARCHAR(2)
);
-- 給表中插入兩條id相同的數據
INSERT INTO stu VALUES(1,'劉德華','男');
INSERT INTO stu VALUES(1,'張學友','男');-- Duplicate entry '1' for key 'id',無法插入重復的id值
-- 給表中插入一條id為null的數據,當給id添加了唯一約束之后,依然可以給他插入多條null值,不會出現重復
INSERT INTO stu VALUES(NULL,'吳奇隆','男');
INSERT INTO stu VALUES(NULL,'劉詩詩','女');
-- 經過我們的分析,我們認定我們的這個id字段(唯一+非空)--主鍵(primary key)
-- 注意:
-- 1.一般來說我們需要給每一張表都設定一個主鍵字段(非空+唯一),用來標示一條信息的唯一性
-- 2.我們一般不會將業務字段設定為主鍵字段,比如name字段,一般我們會給每一張表添加一個id字段作為主鍵字段
-- 3.建議給每張表添加一個主鍵字段,用來標示每一條數據的唯一性
CREATE TABLE stu(
-- 給stu表中的id字段設置為主鍵(唯一+非空)
id INT PRIMARY KEY,
NAME VARCHAR(20),
gender VARCHAR(2)
);
-- 給表中插入兩條id為1的學生信息
INSERT INTO stu VALUES(1,'華仔','男');
INSERT INTO stu VALUES(1,'華建','男');-- Duplicate entry '1' for key 'PRIMARY'
-- 給表中插入id為null的元素
INSERT INTO stu VALUES(NULL,'杰倫','男');-- Column 'id' cannot be null
-- 上面的實驗我們可以得出結論,當我們給id字段設置了主鍵約束后,這個id字段就非空+唯一了
-- 自增長約束(auto_increment)
-- 給stu表中的id字段添加一個主鍵自增長約束
CREATE TABLE stu(
-- 給stu表中的id字段設置主鍵自增長約束,我們其實就將id這個字段交給了數據庫自己去維護,我們自己不需要去動他
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
gender VARCHAR(2)
);
-- 給stu表中添加兩條數據
INSERT INTO stu(NAME,gender) VALUES('華仔','男');
INSERT INTO stu(NAME,gender) VALUES('周杰倫','男');
INSERT INTO stu(NAME,gender) VALUES('周杰倫','男');
INSERT INTO stu(NAME,gender) VALUES('周杰倫','男');
-- 刪除id為4的數據
DELETE FROM stu WHERE id=4;
-- 給表中添加一條數據
INSERT INTO stu(NAME,gender) VALUES('張學友','男');
-- delete from 這種刪除數據的方式,無法重置自增長的主鍵
-- 刪除stu的全表數據
DELETE FROM stu;
-- 添加一條數據
INSERT INTO stu(NAME,gender) VALUES('張學友','男');
-- 刪除全表數據的truncate table 表名 ,刪除全表數據,這種刪除全表數據的方式可以重置主鍵
TRUNCATE TABLE stu;
對于以上關于數據庫知識和spl語句相關講義,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續關注我們的行業資訊,相信你會喜歡上這些內容的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。