當前位置:
首頁 > 知識 > sql語句的使用&mysql單表練習(小白專用版之二)

sql語句的使用&mysql單表練習(小白專用版之二)

2.1簡單數據表內容的增刪改

DML - 增刪改

DQL - 查詢

對數據表的常見操作簡稱:CRUD。

create(增) read(查) update(更改) delete(刪除)

insert語句----向數據表插入數據

方式一:全寫

語法:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);

語法:insert into 表名 values (值1,值2,值3…);

注意事項:

1、值與列一一對應。有多少個列,就需要寫多少個值。如果某一個列沒有值。可以使用null。表示插入空。

2、值的數據類型,與列被定義的數據類型要相匹配。並且值的長度,不能夠超過定義的列的長度。

3、字元串:插入字元類型的數據,建議寫英文單引號括起來。在mysql中,使用單引號表示字元串。

4、date 時間類型的數據也得使用英文單引號括起來: 如』yyyy-MM-dd』,』yyyy/MM/dd』,』yyyyMMdd』 。

5、如果主鍵是自動增長的,可以直接插入數值null。

注意:使用 select * from 表名 —查看該表的所有信息。

練習一:給person表中的所有列插入數據。

插入語句:

insert into person(id,username,password,sex,birthday,salary)

values(null,『zhangsan』,『123』,『nan』,『1992-8-19』,12000);

注意啦:當插入含有中文的數據的時候,出現如下錯誤。

插入語句:(注意:亂碼問題存在於 5.5 之前的版本 5.6已經解決了這個問題!!)

insert into person(id,username,password,sex,birthday,salary)

values(null,『柳岩』,『123』,『女』,『1992-8-19』,12000);

錯誤原因:上述錯誤是亂碼錯誤,主要是因為編碼和解碼使用的編碼表不一致導致的。

即dos窗口進行編碼的時候使用的編碼表和資料庫解碼的時候使用的編碼表不一致導致的。

分析錯誤:

1.首先我們來查看下當前資料庫表person的編碼表:

person表使用的gbk編碼表。

2.接下來查看dos窗口的編碼表:

dos窗口的編碼表也是gbk。

問題:既然person表的編碼表是gbk,而dos窗口也是gbk,兩個編碼表是一樣的,那麼怎麼會發生亂碼呢?

在對數據表中的數據進行插入的時候,使用的dos窗口,這時dos窗口需要對插入的中文進行編碼,然後把數據插入到資料庫中。而dos窗口中使用的編碼表是gbk。但是在mysql資料庫中針對客戶端控制的設置的編碼表是utf8.

解決方案:這時只能修改資料庫中默認的客戶端的編碼表。

修改mysql/my.ini 的配置文件。

my.ini 在mysql的安裝目錄:將客戶端的字符集修改為gbk。

修改為:

注意:修改完mysql的配置文件之後需要重新連接資料庫。

1)退出資料庫,重新登錄

2)使用資料庫mydb2,向person表中插入數據,重新查詢person表。

方式二:省略部分列

insert into 表名(列名,列名,列名。。。。) values(值,值,值。。。。)

注意:

可以省略部分列名。某一列 有默認值,或者允許為空,才可以省略。

主鍵是自增長的認為是有默認值的。也可以省略

注意:在插入數據的時候,如果某些列可以為null,或者是自動增長的列,或者有默認值的,在插入的時候可以省略。

練習:給表中不為空的列插入數據。

插入語句:insert into person(username,password,birthday) values(『suoge』,『123』,『1995-10-19』);

方式三:省略所有的列(掌握)

insert into 表名 values(值,值,值,值);

1、表中有多少列,就有多個值。

2、按照表的結構,列和值去對應。 desc 表名 得到列的順序。 從上倒下,對應的值,從左到右插入數據。

注意:如果給表中的所有列插入數據,這時可以省略表名後面的列名,直接寫values。

插入語句:

insert into person values(null,『wangwu』,『123』,『nv』,『1987-8-9』,13000);

2.2總結:

1)如果主鍵:是自增長。不需要人工賦值(可以給值null)。資料庫會按照自己的演算法,為主鍵填充值。

2)通常遇到主鍵自增長,人工賦值的時候,賦值null。mysql會自己把null替換成新的值。

數據的插入:

兩種方式 – 根據列名插入對應的值

直接插入所有的列 - 將列名省略掉;

2.6.2.update語句—數據記錄修改操作

語法: update 表名 set 列名=值,列名=值… [ where條件語句 ];

注意事項:

1、如果不加條件語句,將會修改某一列的所有值。

2、一般修改數據時,都需要增加條件。(重點)

練習一:修改person表中的所有用戶的password 為 abcdef。

分析:因為要修改所有的用戶,所以這裡不需要添加條件。

更新語句:update person set password=『abcdef』;

練習二:修改姓名為zhangsan的這個用戶的薪水 88888。

分析:由於姓名要求是zhangsan,所以這裡條件就是username=』zhangsan』

更新語句:update person set salary=88888 where username=『zhangsan』;

練習三:把id為 3 的用戶的username和password修改為 zhaoliu。

修改語句:

update person set username=『zhaoliu』,password=『zhaoliu』 where id=3;

2.6.3delete語句-----刪除表中數據的語句

語法:delete from 表名 [where條件語句]

注意:

1)如果刪除表中的記錄時,沒有添加where條件,這時會把表中的所有數據刪除。表依然存在,是空的表。

2)delete是刪除行的數據。

練習1:刪除person表中username為zhaoliu的用戶記錄。

刪除語句: delete from person where username=『zhaoliu』;

練習2:刪除表中所有記錄。

刪除語句:delete from person;

練習3:向person表中在添加一個新的數據。

插入語句:insert into person(username,password,birthday) values(『tianqi』,『123』,『1990-9-7』);

問題:我們發現使用delete語句將資料庫表中所有的數據刪除之後,在新添加的數據之後,id是在原來基礎上繼續遞增,而不是1。那麼我們想讓新添加的數據id從1開始,怎麼辦呢?

truncate 語句----刪除數據

truncate table 表名:

先刪除表,再創建表,就等於將數據全部刪除了。也就是說上述語句執行時會把表的所有內容都刪除掉,然後在創建一個新的表。

性能問題: truncate table的性能相對來說更好,尤其刪除的數據越多,越明顯。

練習1:向person表中插入數據,然後使用:truncate table 表名。 來刪除所有的數據。

插入語句:

刪除語句:

如果要刪除一張表中的所有數據,也可以使用 truncate table 表名;

執行時會把表的所有內容都刪除掉,然後在創建一個新的表。

truncate 缺點:不能有條件的刪除。不能恢複數據

delete 是逐行刪除,並沒有恢復初始化值。 可以恢複數據

面試題1:

delete刪除表中的數據時沒有加where 條件,會刪除表中的所有數據,它與truncate 有什麼區別?

1.DELETE

?DML語言

?數據還可以找回來,恢復回來

逐條刪除 刪除速度要慢一些

?可以有條件的刪除。DELETE FROM 表名 WHERE 條件

2.TRUNCATE TABLE

?DDL語言

?數據不可以恢復

?先將整個表刪除,再重新創建

?刪除速度比delete快。

語法: TRUNCATE TABLE 表名 或者 TRUNCATE 表名

面試題2:

delete from person; 和 drop table person; 有什麼區別:

delete from person; 把person表中的所有數據全部刪除,但是person的表還存在。還可以向表中繼續添加數據。

drop table person; 把person數據表從資料庫中刪除。表已經不存在,不能再向表中添加數據。

2.3可視化工具的介紹

在dos窗口中使用sql語句操作mysql資料庫相對來說,太麻煩了,我們在實際開發中不會使用dos窗口來操作的,一定要使用可視化工具來操作mysql資料庫,而會有多種可視化工具來操作mysql資料庫,比如:Navicat、SQLyog等。我們這裡使用Navicat可視化工具。

1)解壓和安裝:

雙擊 安裝軟體一路下一步安裝(注意要記住自己的安裝路徑!!!)

安裝完成後 雙擊註冊機

找到Nacicat下的啟動軟體

點擊打開後,顯示OK 激活成功!

2)如果是第一次使用,會彈出一個提示框,開機檢查更新,我們不需要更細。

3)關閉之後,點擊軟體左上角的連接按鈕,選中MySql:

然後就會彈出如下界面:

4)簡單熟悉下可視化工具。

5)一般的可視化工具,都能從界面看到 資料庫-》資料庫表-》表數據。

6)在可視化工具中可以編寫sql語句運行

查詢結果:

7)在可視化工具中給內容添加註釋快捷鍵是:ctrl+/

Ctrl + shift + r 運行選中的

這樣我們就簡單熟悉了下可視化工具,接下來我們所有的操作都會在該可視化工具中進行操作。

2.4查詢

數據表記錄的查詢

在企業中資料庫運用最多的就是資料庫中對於表記錄的查詢。

準備工作:

創建資料庫,並向資料庫表中插入數據。

create database day02;

use day02;

create table student(

id int primary key auto_increment,

name varchar(32) not null,

age int ,

gender varchar(10) not null,

score double not null,

birthday date

);

insert into student (id,name,age,gender,score,birthday) values(null,『zhangsan』,23,『male』,98.99,『1990-09-09』);

insert into student (id,name,age,gender,score,birthday) values(null,『lisi』,23,『男』,56.99,『1990-02-09』);

insert into student (id,name,age,gender,score,birthday) values(null,『王五』,24,『女』,75.99,『1988-01-01』);

insert into student (id,name,age,gender,score,birthday) values(null,『趙六』,25,『男』,80.99,『1980-11-12』);

insert into student (id,name,age,gender,score,birthday) values(null,『柳岩』,null,『女』,84,null);

語法一:查詢資料庫中的某張表的所有數據

語法:select * from 表名;

表示查詢表的所有信息。會把表的所有的列,所有的行都列出來。

說明:

1)select 表示選擇的意思;

2)* 表示所有的數據;

3)from 表示從哪個表中選擇;

需求:查詢學生的所有信息。

查詢操作和結果:

4.1.2語法二: 查詢某張表中指定的列

語法: select 列名,列名… from 表名;

說明:顯示指定列數據。列出所有行信息。

需求:查詢所有學生的姓名和成績。

4.1.3語法三:按條件查詢

語法:select 列名,列名… from 表名 where 條件;

說明:查找符合where條件的數據。

作用:過濾,只有符合條件的,才去列出相應的信息。

需求:查詢表中年齡大於等於24歲的學生信息。

4.1.4運算符:

1)>(大於) <(小於) >=(大於等於) <=(小於等於) =(相等) <>或者!= (不相等)

需求:查詢年齡不是25歲的學生。

2)

and 邏輯與 ,多個條件同時成立。&&

or 邏輯或 ,多個條件任意一個成立。||

not 邏輯非 ,相反的意思。!

需求一:查詢年齡>23,並且成績>80的同學信息。

需求二:查詢成績在80~100(包含)之間的學生信息。

3)區間:between … and … 在兩者之間取值。 格式:列名 between 開始值 and 結束值;

注意:前面那個數即開始值要比後面那個數即結束值要小 。

例如:between 70 and 80 在70和80之間。

等價於 >=70 and <=80

age >=24 and age<=50 等價於 age between 24 and 50

需求:查詢成績在80~100(包含)之間的學生信息。

4)in(值1,值2,值3) 在指定值中任意取。

舉例: in(70,80,90) 值可以是70、80或者90

使用格式:

where 列名 in (值,值,值…);

等價於

where 列名=值 or 列名=值 or 列名=值 …

需求:查詢年齡為18,23,25的同學信息。

5)模糊查詢:like 『模糊查詢部分』

表達式有兩個佔位符:

A: % 表示零或任意多個字元 ;

B: _ 任意單個字元;

例如: name like 『張%』 所有姓張學員。

name like 『%張%』 只要有張就可以。

name like 『張_』 所有姓張名字為兩個字學員。

name like 『張』 只有中間是張,前面一個字,後面一個字。

需求:查詢所有含有 岩 的學生信息。

注意:含有某個值: %xx%

6)is null 判斷該列值是否為空。

sql中對null的判斷,不能寫 = null 在sql 中 null = null 結果不成立。 正確格式:is null

不是空 : is not null。

需求1:查詢沒有生日學員信息。就是生日是null。

需求2:查詢有年齡學員信息。就是年齡不是空。

語法四 :過濾重複數據:

查詢排重:select distinct 列名 from 表名 [where 條件];

說明:distinct: 去重複。顯示distinct後面列的內容,並且過濾掉重複的數據。

需求:顯示不重複的年齡。

語法五 :對查詢的結果進行排序:

使用order by 子句排序查詢結果。

語法:select * from 表名 order by 列名1 asc|desc,列名2(asc|desc),列名3(asc|desc) 。。。。。;

按照列名1,列名2,列名3 進行排序輸出。

asc是升序排列,desc是降序排列。默認是asc升序。

按照第一列進行排序,如果第一列相同,按照第二列在進行排序。

注意: order by a asc,b asc

a, b

1, 2

1, 3

4, 5

3, 1

結果:

1,2

1,3

3,1

4,5

需求:

1、對成績排序後輸出。

2、對年齡排序按從高到低(降序)的順序輸出。

3、對學生年齡按照降序排序,年齡相同按照成績降序。

1、對成績排序後輸出。

2、對年齡排序按從高到低(降序)的順序輸出。

3、對學生年齡按照降序排序,年齡相同按照成績降序。

4.1.7別名:可以對查詢出來的列名起別名

語法:select 列名 as 別名,列名 as 別名,列名 as 別名… from 表名 where 條件;

注意:在使用別名的時候,as 關鍵字可以省略。

需求1、給年齡和分數起別名。

需求2、省略關鍵as 再次查詢。

4.1.8面試題:

1、select age , score from student;

2、select age score from student;

上述SQL語句有什麼區別?

第一個Sql語句查詢結果如下圖所示:

查詢結果有兩列,分別是age和score。

第二個Sql語句查詢結果如下圖所示:

查詢結果只有一列,其實顯示的數據是age列,數據上面的名字是別名score。

sql語句的使用&mysql單表練習(小白專用版之二)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

GLM到FM到FFM到DeepFM
Eclipse編輯Spring配置文件xml時自動提示類class包名

TAG:程序員小新人學習 |