sqlserver修改表欄位長度「sqlserver增加欄位長度」

創建表

最基本的創建

在mysql中,數據的家就叫做表,張三住在張家,李四住在李家,他們屬於一個家庭單元,mysql的表也是一樣的邏輯。
我們可以給mysql的表起一個名字,然後規定表裡面的成員有哪些,例如整個宇宙都在用的student的例子:

create table student (
    s_name varchar(120) comment '學生的名字',
    s_age integer comment '學生的年齡',
    s_class varchar(120) comment '學生的班級'
)

像這樣執行一下我們就能給我們的學生創建一個大家庭啦。
這樣我們就得到了一個類似excel表裡的東西:

s_names_ages_class
學生的名字學生的年齡學生的班級

當然,這個語句裡面還有幾個值得注意的地方

1、comment語句,是用來給這個欄位加一個中文的注釋的.
2、varchar(數字) 是用來規定欄位的類型的
我們可以簡單理解mysql的類型,無非就是數字和字元還有時間,數字就是integer,字元就是varchar,大部分情況下int和varchar已經夠用了,對於我們初學者來說,只需要分辨它的數據類型是字元串還是數字還是時間就好啦。

怎麼查看一個已經建好的表的信息呢

desc student;

用Desc關鍵字加表名就可以查到啦,大概就是像下面的結果:

s_name varchar(120)
s_age int(11)
s_class varchar(120)

基本上跟我們輸入的一毛一樣對不對。
對於初學者來說,創建表理論上只需要懂這麼多就可以了。總結下來就是各回各家各找各媽每個數據都有自己的家,它們在mysql裡面的名字叫「表」。
如果你到了後期想要知道更多的關於創建表的知識,歡迎提問。

修改欄位

修改欄位使用alter語句,那為啥我們要修改欄位嘞?因為有些時候我們建了一個表,起初就像是我們在上面兼得student表,它只有三個欄位,姓名年齡班級,但是恰好某一天班主任因為一件特殊的事情,他想要知道學生們的身高。
那我們就需要去改一下我們建好的表啦。
使用這個語句來更改mysql中的表:

alter table student add column s_height integer comment '學生的身高'

上面的是我們在這個表裡面,add column , 新增了一個欄位,後面的信息跟創建表的時候一毛一樣.
運行這個就能給student加一個身高欄位啦!

那麼問題來了,如果班主任發現學生的名字比120個字元還要大怎麼辦?
s_name varchar(120) 我們知道上面給學生的名稱設置了120個字元,萬一有一個學生叫尼古拉斯安琪拉大魚寶貝…,得,名字比120個字元還要多咋辦?
哈哈哈,不慌,我們還可以用alter來更改欄位的長度!

alter table student modify column s_name varchar(225) comment '學生的名字'

這樣就可以啦!
還是一樣,初學者知道怎麼加欄位和改欄位信息就行了。注意,改欄位要考慮已經有了的數據哦,萬一你把一個本來120個字元的名字,改成了20個字元,豈不是大家的長度都不夠啦

插入數據

現在我們已經有了一個完美的student表啦,但是,它裡面還沒有學生入住,辣怎麼行!我們必須得給裡面插入一些數據才行吧,否則班主任就太孤獨了。
我們用下面的語句在mysql中插入一條數據:

insert into student (
    s_name,
    s_age,
    s_class,
    s_height
) values (
    '張三丰',
    17,
    '三年二班',
    188
)

讓我來翻譯一下這個語句吧:

insert into student (
   這裡寫每個成員的信息列表
) values (
  這裡寫每個信息的值
)

怎麼樣,插入語句是最簡單的了吧,注意被一個信息對應了每一個數據的順序,並且你輸入的值,需要跟自己規定的一樣哦,各回各家,各找各媽
嫌棄一次只能插入一條數據太慢?辣怎麼行!mysql支持用逗號把很多values隔開,這樣就能一次性插入多條啦

insert into student (
    s_name,
    s_age,
    s_class,
    s_height
) values (
    '張四豐',
    16,
    '一年二班',
    160
),
(
    '李五六',
    15,
    '幼年大班',
    177
)

修改和刪除數據

修改

哎呀,突然發現剛剛插入的數據,張三丰的身高弄錯了怎麼辦!他明明是2米的!辣怎麼行!
不慌,mysql可以改,使用update語句就可以改了

update student set s_height=200 where s_name='張三丰'

這裡我們還接觸到了where這個條件語句,它的意思就是生效的範圍,我們在修改數據的時候,一定不要忘記加where哦,如果你這麼寫:

update student set s_height=200;

那麼你就完蛋啦, 你會把所有人的身高都改成200。
趕緊捲鋪蓋跑路了。

刪除

我們決定開除李五六,沒有別的理由,用下面的語句就好:

delete from student where s_name = '李五六'

記住一定不要忘記加where,在delete的時候還應該加上limit 100

delete from student where s_name = '李五六' limit 100

這樣可以保住小命哦.

第一個查詢

終於到了激動人心的時候了
讓我們先來簡單了解下select的簡單結構

select 欄位列表 from 表名 where 條件

怎麼樣,很簡單吧,例如我現在要看一下student裡面的張三丰

select * from student where s_name='張三丰'

顯示的結果會是:

s_names_ages_classs_height
張三丰17三年二班200

很簡單吧,以此類推,如果我們只想知道張三丰所在的班級,應該這麼查:

select s_class from student where s_name='張三丰'
s_class
三年二班

這樣就查出來張三丰屬於三年二班啦.

條件語句

哈哈哈,九陽神功已經練成,讓我們來多嘗試幾次

使用age的大小比較,查看大於16歲的學生:

select * from student where s_age > 16
s_names_ages_classs_height
張三丰17三年二班200

使用多個條件並聯,大於15歲且身高小於190的學生

select * from student where s_age > 15 and s_height < 190
s_names_ages_classs_height
張四豐16一年二班160

like語句

like語句的作用是做模糊匹配,例如我們隱隱約約記得一個叫張x的人,我們可以通過like來模糊查找:

select * from student where s_name like '%張%'
s_names_ages_classs_height
三豐17三年二班200

這裡有一個知識點:
1、like ‘%張%’ 字元前後都有%,表示匹配到「張」這個字就會命中
2、like ‘%張’ 只有字元前有%,表示字元末尾匹配到「張」這個字才會命中
3、like ‘張%’ 只有字元後有%,表示字元開頭匹配到「張」這個字才會命中
你學廢了嗎?

join操作解釋

在mysql中,最令人頭疼的除了group by恐怕就是join語句了,left join ? right join ? 辣怎麼行!完全看不懂!

JOIN的含義就如英文單詞「join」一樣,連接好多表,大致分為內連接,外連接,右連接,左連接,自然連接.

JOIN 就是將一張表的每一條記錄,與另一張表的每一條記錄強行拼在一起。
所以,如果A表有n條記錄,B表有m條記錄,結果就會產生n*m條記錄。
強扭的瓜雖然不甜,但是join的瓜還是很甜的。

為了便於實驗,我們現在新建一個表插入一些數據

1、學校表

create table school (
    sch_name varchar(120) comment '學校的名稱',
    sch_address varchar(220) comment '學校的地址'
)

弄幾個學校進去

insert into school (sch_name, sch_address) values (
    '手大',
    '北京東路32號'
),
(
    '肚子大',
    '朝陽南路1號'
),
(
    '臉大',
    '南京南路3號'
)

老師表

create table teacher (
    tea_name varchar(120) comment '老師的名字',
    tea_subject varchar(220) comment '老師教的科目'
)
insert into teacher (
    tea_name,
    tea_subject
) values (
    '馬爸爸',
    '社會學'
),
(
    '王爸爸',
    '資本論'
),
(
    '特靠譜',
    '嘴炮學'
)

好的,萬事大吉!現在我們就可以試試join長啥樣了

JOIN

select * from student as A join school B join teacher C

as語句是給這張表起一個好記的名字,因為student school teacher在這一串查詢條件裡面太長了,所以給他們叫A、B、C好了
這裡我們可以看看最終得到了什麼樣的數據?
——一共可以得到8個欄位共18條數據,實在是太多啦,我簡單列舉出張三丰的數據:

s_names_ages_classs_heightsch_namesch_addresstea_nametea_subject
張三丰17三年二班200臉大南京南路3號馬爸爸社會學
張三丰17三年二班200臉大朝陽南路1號王爸爸資本論
張三丰17三年二班200臉大北京東路32號特靠譜嘴炮學
張三丰17三年二班200肚子大朝陽南路1號王爸爸資本論
張三丰17三年二班200肚子大南京南路3號馬爸爸社會學
張三丰17三年二班200肚子大北京東路32號特靠譜嘴炮學
張三丰17三年二班200手大朝陽南路1號馬爸爸社會學
張三丰17三年二班200手大南京南路3號王爸爸資本論
張三丰17三年二班200手大北京東路32號特靠譜嘴炮學

可以看到join操作就是把這幾張表,強行拼湊在一起

我們也可以加上where條件,控制數據

select * from student as A join school B join teacher C where A.s_name='張三丰' and B.sch_name='手大' and C.tea_name='特靠譜'

這樣我們就只拿了一條數據:

s_names_ages_classs_heightsch_namesch_addresstea_nametea_subject
張三丰17三年二班200手大北京東路32號特靠譜嘴炮學

所以JOIN的作用是什麼?就是把幾張表強行揉在一起.
我們可以在join的表名後加on語句,它跟where是一樣的,但是它是join表的條件語句

select * from student as A join school B on B.sch_name='臉大' join teacher C
s_names_ages_classs_heightsch_namesch_addresstea_nametea_subject
張三丰17三年二班200臉大南京南路3號馬爸爸社會學
張三丰17三年二班200臉大朝陽南路1號王爸爸資本論
張三丰17三年二班200臉大北京東路32號特靠譜嘴炮學

這樣join的表就過濾掉了其他的數據,跟where條件的作用是一樣的.

INNER JOIN

inner join 又叫做內連接,emm,其實它就是取交集,
我們前面知道了join是強行把幾張表揉在一起,而inner join,是把幾張表的交集部分揉在一起。(交集,就是幾個表中共有的一摸一樣的那部分)
inner join 是一定要寫on的,如果不寫on的話,就跟join差不多啦。在on中寫出a和b交集的部分.
為了演示,我得再給老師表加一個班級欄位,然後改掉馬爸爸的班級

alter table teacher add column tea_class varchar(200) comment '老師的班級';
update teacher set tea_class='三年二班' where tea_name='馬爸爸';

好啦接下來我們試一下inner join

select * from student as A inner join teacher C on C.tea_class=A.s_class
s_names_ages_classs_heighttea_nametea_subjecttea_class
張三丰17三年二班200馬爸爸社會學三年二班

這樣我們就查出來老師馬爸爸所在的三年二班的所有學生列表了。
amazing!

可以再插入一個學生再查詢一次試試:

insert into student (
    s_name,
    s_age,
    s_class,
    s_height
) values 
(
    '王八',
    22,
    '三年二班',
    177
)
s_names_ages_classs_heighttea_nametea_subjecttea_class
王八22三年二班200馬爸爸社會學三年二班
張三丰17三年二班177馬爸爸社會學三年二班

amazing!

LEFT JOIN

left join 又叫做左連接,它對應的還有一個右連接,emm,其實它也是取交集,
left join含義就是求兩個表的交集外加左變表剩下的數據。 跟innerjoin的區別就在於它會同時拿到左邊表剩下的數據!

讓我們來運行一個查詢試試

select * from student as A left join teacher C on C.tea_class=A.s_class
s_names_ages_classs_heighttea_nametea_subjecttea_class
王八22三年二班200馬爸爸社會學三年二班
張三丰17三年二班177馬爸爸社會學三年二班
張四豐16一年二班160

amazing,這樣看是不是很明顯了?
left join就是left join語句左邊的表,保留全部數據,同時連接上右邊的表,不匹配的欄位就是空的。

RIGHT JOIN

與left join極為相似,只是它取的是left join語句右邊的表的全部數據,不匹配的欄位是空的。

select * from student as A right join teacher C on C.tea_class=A.s_class
s_names_ages_classs_heighttea_nametea_subjecttea_class
王八22三年二班200馬爸爸社會學三年二班
張三丰17三年二班177馬爸爸社會學三年二班
王爸爸資本論
特靠譜嘴炮學

amazing!

group by

終於講到了這裡!你也看到了這裡!
group by,顧名思義,就是分組
直接上一個簡單的例子看一下:

select s_name,s_class from student group by s_class
s_names_class
張三丰三年二班
張四豐一年二班

顧名思義,就是按照s_class欄位來進行分組,把所有重複的剔除掉,只保留不一樣的那一行,可以看到這次的結果裡面沒有「王八」那一條數據,因為它跟其他的數據重複了。因為王八跟張三丰都是同一個班級「三年二班」的,group by去掉了重複的行。

一般group by是搭配統計函數count來使用的,往下看就可以看到啦。

having

group by 還可以寫分組過後的條件語句,其實它的寫法跟where一樣的,只是它是專門寫在group by後面的。

select s_name,s_class from student group by s_class having s_name='張三丰'
s_names_class
張三丰三年二班

order by

order by 就更簡單了,就是根據後面的欄位來排序,desc是倒序,asc是正序,字元比首字母,數字比大小,日期比先後

select s_name,s_class,s_age from student group by s_name,s_class,s_age order by s_age desc
s_names_classs_age
王八三年二班22
張三丰三年二班17
張四豐一年二班16

order by跟group by一起用的時候,寫在group by後面哦

簡單函數

count

在group by那裡我們看到了group by的用法,一般我們用的最多的還是使用group by來count一個數據出現的次數
例如

select s_name, count(1) as num from student group by s_name
s_namenum
王八1
張三丰1
張四豐1

它們仨都只出現了一次,如果我們再插入一條數據:

insert into student (
    s_name,
    s_age,
    s_class,
    s_height
) values 
(
    '王八',
    22,
    '三年二班',
    177
)

再來查詢一遍

select s_name, count(1) as num from student group by s_name
s_namenum
王八2
張三丰1
張四豐1

三年二班就有2隻王八了。

max min avg

1、然後我們可以使用max獲取最大的那一個數據

select max(s_age) as max_age from student

結果是22

2、使用min獲取最小的哪一個數據:

select min(s_age) as min_age from student

結果是16

3、使用avg獲取平均值

select avg(s_age) as avg_age from student

結果是19.25

它們的妙用在這裡
1、找到年齡最大的同學

select s_name from student where s_age=(
 select max(s_age) as max_age from student
)

2、找到年齡最小的同學

select s_name from student where s_age=(
 select min(s_age) as max_age from student
)

3、找到年齡比平均年齡小的同學

select s_name from student where s_age<(
 select avg(s_age) as max_age from student
)

str_to_date date_format

1、str_to_date把字元轉換成時間

select str_to_date('2021-10-01', '%Y-%m-%d');

2、date_format把時間轉成想要的字元串

select date_format(NOW(), '%Y哈哈哈%m哈哈哈%d');

ps 中間的哈哈哈可以換成任意的東西哦, NOW()是查詢當前時間

其他函數

菜鳥教程有一堆關於其他函數的描述,可以看看
https://www.runoob.com/mysql/mysql-functions.html

結束

game over!收工

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/209412.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:36
下一篇 2024-12-08 15:36

相關推薦

發表回復

登錄後才能評論