mysql(一)

主要是一些sql語句,實現了就好


會在後邊上產一個附件,裏邊是一些數據庫知識和和一些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;

-- 給表中添加一條數據

INSERT INTO stu(NAME,gender) VALUES('華仔','男');






SELECT * FROM stu;

DROP TABLE stu;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章