1. 程式人生 > >T-SQL 查詢、修改資料表

T-SQL 查詢、修改資料表

T-SQL修改表資料

INSERT語句

語法:

INSERT 
[TOP(expression) [PERCENT]]
[INTO] 
  { <object> | rowset_function_limited 
    [ WITH ( <Table_Hint_Limited> [ ...n ] ) ] /*指定表提示*/
    | view_name } /*檢視名*/
  {
    [(column_list) ] /*指定列名*/
    [<OUTPUT Clause> ] 
    {VALUES /*指定列名的取值*/
      {DEFAULT | NULL | expression}[1…n]) /*列值的構成形式*/   


        |derived_table|execute_statement } } /*結果集*/
    |DEFAULT VALUES /*所有列均取預設值*/

例子:

/*插入單個元組*/
/*向student表中插入一個學生記錄(‘200’,‘曾雷’,‘女’,‘1978-2-3’,‘05001’)*/
USE test            
INSERT INTO student_1 
VALUES(100,'曾雷','女','1995-2-3',20)

/*查詢student表,檢視結果*/
select * from student_1
-----------------------------------------------------------------------------------


/*向student表中插入一個學生記錄(‘201’,‘孫浩’,‘男’,‘1977-8-4’,NULL)*/
INSERT INTO student_1(sno,sname,ssex,sbirthday,sage) 
VALUES(200,'孫浩','男','1996-8-4',null)

select * from student_1
delete from student_1 where sno=200

INSERT INTO student_1(sno,sname,ssex,sbirthday) 
VALUES(200,'孫浩','男','1996-8-4')
-----------------------------------------------------------------------------------


/*插入元組集合*/
/*將student_1表中的相關資料插入到student表中*/
select * from student
select * from student_1

insert into student(sno,sname,ssex,sage)
select sno,sname,ssex,sage 
from student_1 


/*向student表中新增兩個新生*/
INSERT INTO student_1(sno,sname,ssex,sbirthday,sage) 
VALUES(300,'王明','男','1996-8-4',19),(400,'趙強','男','1996-4-1',19)
-----------------------------------------------------------------------------------


/*向自增列新增資料*/
create table testidentity(
id int identity,
words varchar(10))

insert into testidentity values('a')  --標識列不指定
insert into testidentity values('b')  --指定除了標識列外的列

set IDENTITY_INSERT testidentity on   
insert into testidentity(id,words) values(10,'c')  --指定標識列

set IDENTITY_INSERT testidentity off  
insert into testidentity values('d')

select * from testidentity

UPDATE語句

語法:

UPDATE{table_name|view_name}
SET column_name = {expression | DEFAULT | NULL}[1…n]
where where_clause

例子:

/*將sc表中的成績小於60的加5。*/
UPDATE sc
SET grade=grade+5
WHERE grade<70

/*將張三選修1號課程的成績置零。*/
UPDATE sc
SET grade=0
WHERE cno=1 and sno in
  (select sno from student where sname='張三')
  
  
/*將學號為1的學生的姓名改為張三十,年齡改小2歲。*/
UPDATE student
SET sname='張三十',sage=sage-2   --同時更新多列
WHERE sno=1

select * from student
-----------------------------------------------------------------------------------

/*使用top表示式*/
UPDATE top(2) student
SET sage=sage-2  

UPDATE top(50) percent student
SET sage=sage-2

DELETE語句

語法:

DELETE table_name 
WHERE search_condition

例子:

/*刪除student表中學號為200的記錄*/
select * from student
select * from sc

DELETE student  
WHERE sno='200'

/*刪除張三的選修1號課程的選課記錄*/
DELETE sc  
WHERE cno=1 and sno in 
    (select sno from student where sname='張三')
-----------------------------------------------------------------------------------

/*TRANCATE*/
/*TRUNCATE TABLE  table_name*/
/*一次刪除表中所有資料,即清空表,
  但表的結構及約束保持不變,且該操作不記錄日誌,無法恢復,使用時必須慬慎。*/
  
  
/*刪除student_1表中的記錄*/
TRUNCATE TABLE  student_1

select * from student_1

T-SQL查詢資料

SELECT 語句語法:

SELECT select_list
[INTO new_table]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC]]

簡單查詢例子:

/*查詢列*/

/*查詢student表中所有記錄的sname、ssex和sage列*/
SELECT sname,ssex,sage
FROM student

/*查詢有選課記錄的課程cno*/
select distinct cno   --避免重複項
from sc

/*查詢有85分以上成績的課程cno*/
SELECT DISTINCT cno
FROM  sc 
WHERE grade>85


/*查詢student表的所有記錄*/
SELECT *
FROM student

SELECT sno as '學號',sname as '姓名',ssex as '性別'    
FROM student


/*返回部分結果top*/
select top(1) * from student
select top(1) * from student where ssex='女'
select top(1) with ties *  from student order by sage
select top(50) percent * from student


/*計算列*/
select sno,sname,2015-sage as '出生年月' from student
select sno,cno,grade*1.1 from sc
-----------------------------------------------------


/*選擇查詢

查詢sc表中成績大於60的所有記錄*/
SELECT *
FROM sc
WHERE grade>60


/*查詢sc表中1號課程成績大於60的所有記錄*/
SELECT *
FROM sc
WHERE cno=2 and grade>60


/*查詢score表中成績在60~80之間的所有記錄*/
SELECT *
FROM sc
WHERE grade between 60 and 80


/*查詢sc表中成績為85、86或88的記錄*/
SELECT *
FROM sc
WHERE grade in(85,86,88)


/*字串匹配*/

/* % 匹配任意字元
   _ 匹配單個字元
  [] 匹配括號中的任意一個字元
  [^]或[!]匹配沒有出現在括號中的單個字元
   escape換碼字元  */

select * from student

/*查詢student表中姓張的或性別為“女”的學生記錄*/
SELECT *
FROM student
WHERE sname like '張%'or ssex='女'

/*查詢student表中姓李的學生*/
SELECT *
FROM student
WHERE sname like '李%'

SELECT *
FROM student
WHERE sname like '[李]%'

SELECT *
FROM student
WHERE sname like '李_'

SELECT *
FROM student
WHERE sname like '[^李]%'

SELECT *
FROM student
WHERE sname not like '[李]%'

SELECT *
FROM student
WHERE sname like '%[四]%'


/*查詢sc表中沒成績的記錄*/
SELECT *
FROM sc
WHERE grade is null

SELECT *
FROM sc
WHERE grade is not null


/*查詢結果排序*/
SELECT *
FROM sc
order by grade 

SELECT *
FROM sc
order by cno,grade desc


/*分組查詢*/
/*group by group_by_expression[with rollup|cube]*
  having search_condition
  with rollup 只返回第一個分組條件制定的列的統計行;
  而with cube除返回group by制定的列外,還返回按組統計的行*/

SELECT cno,AVG(grade)
FROM sc
group by cno

SELECT cno,AVG(grade)
FROM sc
group by cno
having AVG(grade)>60

SELECT cno,tno,AVG(grade)
FROM sc
group by cno,tno

SELECT cno,tno,AVG(grade)
FROM sc
group by cno,tno with rollup

select AVG(grade)
from sc

高階查詢例子:

/*巢狀查詢*/
use test

/*使用IN或NOT IN*/
select sname
from student
where sno in
    (select sno 
     from sc
     where cno=2)

select sname
from student
where sno not in
    (select sno 
     from sc
     where cno=2)
     
    
/*比較運算子的子查詢*/

select sno,grade
from sc sc1
where sc1.cno=1 and 
    sc1.grade=(select sc2.grade 
                from sc sc2 
                where sc2.cno=1 and sc2.sno=1)
                
select * from sc

select sno,grade
from sc sc1
where sc1.cno=1 and 
    sc1.grade>(select sc2.grade 
                from sc sc2 
                where sc2.cno=1 and sc2.sno=1)
                
select sno
from sc 
where cno=1 and 
      grade>all(select grade from sc where sno=1)
      
select sno
from sc 
where cno=1 and 
      grade>(select max(grade) from sc where sno=1)
            

select student.sno,sname,cno,grade
from sc as a,student
where student.sno=a.sno and  --不相關子查詢
    grade>(select avg(grade)
           from sc b
           where b.cno=a.cno)  


/*exists*/
SELECT sname
FROM student 
WHERE EXISTS
 (SELECT *
  FROM sc
  WHERE student.sno=sc.sno and sc.cno=2)
  
SELECT sname
FROM student 
WHERE not EXISTS
 (SELECT *
  FROM sc
  WHERE student.sno=sc.sno and sc.cno=2)


/*多層巢狀查詢
查詢最高分的學生姓名*/

select *
from student
where not exists
    (select * 
     from course
     where not exists
        (select * 
         from sc
         where sc.sno=student.sno and sc.cno=course.cno))


select sname
from student
where sno in
    (select sno
     from sc
     where  grade=
        (select max(grade)
        from sc))
go

select * from sc
select * from student


/*DELETE、UPDATE和INSERT語句中的子查詢*/
------------------------------------------------------------


/*聯接查詢*/
use test

/*查詢學生的姓名,選課號及成績*/

select sname,cno,grade
from student,sc 
where student.sno=sc.sno

select sname,cname,grade 
from student,sc,course  --多表連線
where student.sno=sc.sno and sc.cno=course.cno

select sname,cno,grade
from student inner join sc on(student.sno=sc.sno) --內連線


select student.sname,sc.cno,sc.grade
from student left join sc on (student.sno=sc.sno)  --左向外連線


select student.sname,sc.cno,sc.grade
from student right join sc on (student.sno=sc.sno)   --右向外連線


select student.sname,sc.cno,sc.grade
from student full outer join sc on (student.sno=sc.sno)  --完全外部連線


select student.sno,sc.sno,sc.cno,sc.grade  
from student cross join sc                  --交叉連線

select student.sno,sc.sno,sc.cno,sc.grade  
from student cross join sc                  --帶限定條件的交叉連線
where student.sno<2


select c1.cno,c2.cname
from course c1,course c2    --自連線
where c1.cpno=c2.cno
--------------------------------------------------------------------------

/*無法使用ntext、text或image列上直接連線表,
但是使用substring函式在ntext、text或image列上間接聯接表,如*/

select *
from student join sc
on substring(student.mytext,1,2)=substring(sc.mytext,1,2)
------------------------------


/*使用UNION運算子組合多個結果
查詢所有作者和客戶的號碼和名稱*/

select sno,sname from student where sno=1
union
select sno,sname from student where sno=2
go
---------------------------

 /*在查詢的基礎上建立新表
將查詢得到的學生學號、姓名、課程和分數輸入到新建的表score1中,
再顯示該新表的記錄*/

select student.sno,avg(grade) as 平均成績
into avggrade    --該表自動生成
from student inner join sc on (student.sno=sc.sno)
group by student.sno

select * from avggrade


drop table avggrade

部落格園部落格:欠扁的小籃子

相關推薦

T-SQL 查詢修改資料

T-SQL修改表資料 INSERT語句 語法: INSERT [TOP(expression) [PERCENT]][INTO]   { <object> | rowset_function_limited     [ WITH ( <Table

使用T-SQL建立修改資料庫

原文出處:http://blog.jobbole.com/86718/ 一、使用Transact_SQL建立資料庫 Transact_SQL語法如下: 1 2 3 4 5 6 7 8

SQL查詢資料庫中所有表字段名及資料型別

select b.name,a.colid,a.name,(select systypes.name+'('+cast(a.length/2  as varchar(10))+')' from syst

SQL修改資料列名

修改表名'test'改為'Persons' alter table test rename to persons 修改列名'Ip'改為'Id_P' ALTER TABLE `persons` C

使用T-SQL語句操作數據-查詢數據

成績表 例子 別名 默認 分數 from having lec ade 查詢(select)的基本格式:select <列名> from <表名> [where <查詢限定條件>]解釋:select 查詢的命令體列名:要查詢

sql查詢庫中所有中的資料總數

SELECT table_name,num_rows FROM USER_TABLES  ORDER BY num_rows DESC USER_TABLES 列說明: table_name -表名tablespace_name -表空間名cluster_name -群集

SQL增加修改刪除資料

複製一個表 複製emp表 —— 新的表名稱為myemp CREATE TABLE myemp AS SELECT * FROM emp ; select * from tab; 檢視當前使用者所有表,可以看到myemp複製完畢 (一)增加資料 (1)插入一條新的資料 INSERT IN

[SQL Server玩轉Python] 二.T-SQL查詢表格值及Python實現資料分析

在開發專案過程中,更多的是通過Python訪問SQL Server資料庫介面,進行資料探勘的操作;而SQL Server2016版本之後,嵌入了強大的R、Python、Machine Learning等功能,尤其是Python程式碼置於儲存過程中,可以實現一些便捷資料分析功能。 本系

HiveQL的DDL操作(一)——建立查詢修改刪除

DDL(data definition language)資料庫定義語言: 關鍵詞:create、alter、drop,對庫和表的操作。 一、建立表 1.1 建立表的完整語法及欄位解釋 create (external) table (if not exists) table_nam

phpMyAdmin 安裝,建立修改和刪除資料庫及插入瀏覽搜尋資料中的資料

phpMyAdmin是眾多MySQL圖形化管理工具中使用最廣泛的一種,不管是Windows還是Linux,都可以通過該管理工具可以對MySQL進行各種操作。 一、下載及安裝 使用者可以在官方網站上免費下載最新版本,免費下載 下載好後,把壓縮包解壓到apache的專案目錄中,開啟config

PL/SQL簡單使用——匯入匯出資料

1、使用PL/SQL匯出、匯入表 在使用PL/SQL操作oracle資料庫時,經常使用的一個操作就是將自己寫的資料表匯出,或者想把他人的資料表匯入到自己的資料庫中。雖然是很簡單的操作,但自己之前一直出錯,所以在這裡記錄一下使用方法。 1.1.匯出資料表

T-SQL基礎】01.單查詢-幾道sql查詢

概述: 本系列【T-SQL基礎】主要是針對T-SQL基礎的總結。 【T-SQL基礎】06.透視、逆透視、分組集 【T-SQL基礎】07.資料修改 【T-SQL基礎】09.可程式設計物件  ------------------------------------------

MySQL入門——修改資料4:新增主鍵約束顯示錶結構新增唯一約束

這裡的新增主鍵約束、新增唯一約束,指的是列級約束,是在資料表建立以後再新增的。 例如,給user3表中的id欄位新增主鍵約束: ALTER TABLE user3 ADD PRIMARY KE

MYSQL資料庫(九)- 修改資料名稱列名稱

目錄 一、修改列定義(modify col_name) 二、修改列型別(modify col_name) 三、修改列名稱(change col_name) 三、修改表名稱(rename table a to b) 用到的語句 a、修改

LINQ to SQL 系列 如何使用LINQ to SQL插入修改刪除資料

LINQ和 LINQ to SQL 都已經不是一個新事物了,但是我接觸的比較晚,本著絕知此事要躬行的態度,決定寫這個系列。 本文使用的測試環境是VS 2010,和sql server 2005資料庫。 第一篇      

mysql批量查詢修改, 批量刪除儲存過程

場景:有的時候需要批量更新部分有規律的表或者修改其屬性。 處理方案:使用 函式CONCAT 來生成批量執行sql語句,再執行批量sql語句。 如: 批量刪除所有表 SELECT CONCAT( 'drop table ', table_name, '

Ubuntu Linux查詢修改檔案和資料夾許可權

1、檢視檔案及資料夾許可權:ls -l 檔名稱,ls -ld 資料夾名稱         在住資料夾下新建一個空白文件nihao,建立資料夾hello            命令:ls -l nihao 檢視文件的的許可權                  -rw-rw-r

T-sql 查詢系統 獲取所有物件的定義sql語句

SELECT DISTINCT o.name AS Object_Name, o.type_desc FROM sys.sql_modules m INN

如何查詢修改參數狀態值

mage align images http 大小 mysql數據庫 datadir cnblogs mil Q:何為“數據庫”? A:   也就是說數據庫實例,“數據庫” = 數據庫軟件 + 數據庫:存於磁盤中 1、數據庫裏面存表:放置在datadir目錄下 mys

T-SQL查詢進階--深入淺出視圖

bsp images select語句 執行 lte 告訴 企業 contact 需要 簡介 視圖可以看作定義在SQL Server上的虛擬表.視圖正如其名字的含義一樣,是另一種查看數據的入口.常規視圖本身並不存儲實際的數據,而僅僅存儲一個Select語句和所