當前位置:首頁 » 編程語言 » sqlandnot

sqlandnot

發布時間: 2022-09-13 01:59:48

⑴ 在關系資料庫標准語言sql中,實現數據檢索的語句命令是什麼

Select 查詢語句
語法:SELECT [ALL|DISTINCT] <目標列表達式> [AS 列名][,<目標列表達式> [AS 列名] ...] FROM <表名> [,<表名>…]
[WHERE <條件表達式> [AND|OR <條件表達式>...]
[GROUP BY 列名 [HAVING <條件表達式>>
[ORDER BY 列名 [ASC | DESC>
解釋:[ALL|DISTINCT] ALL:全部; DISTINCT:不包括重復行
<目標列表達式> 對欄位可使用AVG、COUNT、SUM、MIN、MAX、運算符等
<條件表達式> 查詢條件 謂詞
比較 =、>,<,>=,<=,!=,<>,
確定范圍 BETWEEN AND、NOT BETWEEN AND
確定集合 IN、NOT IN
字元匹配 LIKE(「%」匹配任何長度,「_」匹配一個字元)、NOT LIKE
空值 IS NULL、IS NOT NULL
子查詢 ANY、ALL、EXISTS
集合查詢 UNION(並)、INTERSECT(交)、MINUS(差)
多重條件 AND、OR、NOT
<GROUP BY 列名> 對查詢結果分組
[HAVING <條件表達式>] 分組篩選條件
[ORDER BY 列名 [ASC | DESC> 對查詢結果排序;ASC:升序 DESC:降序

⑵ SQL語言的用法

有關資料庫的一寫操作:
創建表項就不說了.
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
插入記錄:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
刪除記錄:
delete from Student where Sno = 'aaa';
註:只需要刪除一個主鍵就可以了。其他的記錄會相應的刪除掉。
刪除表中一個欄位:
ALTER TABLE Student DROP column Ssex; 列名;
修改表中的那一行數據:
原來的記錄:
Sno Sname Ssex Sdept
aaa mary f 172
update Student set Sname='mary1', Ssex='m' where Sno='aaa';
修改後:
Sno Sname Ssex Sdept
aaa mary1 m 172

desc倒敘排列:
建立索引:
create unique index Sno on Student(Sno);
索引的一點好處:在查詢時候比較方便,在存在的所有記錄中查找一個Sno=1的時候!建立索引的表中就直接查找Sno項比較它是否=1找到後查相關的記錄就比較快。沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno欄位,再比較其值=1的相關記錄。

默認是ASC。
按表中哪個欄位倒敘排序:
select * from Student order by Sno desc;
注意:要排序的欄位必須是int型。

設置成自增長的欄位在插入數據的時候不需要插入該欄位的值:
select * from Student order by Sno desc;
原來沒有設置成自增長插入數據命令:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
將int型的Sno欄位設置成自增長後
insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');
insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');
insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');

在表中的排序如下:
Sno Sname Ssex Sdept
1 mary1 f 172
2 mar1y f 172
3 ma1ry f 172
4 m1ary f 172
/*********************************************************************************
2006.7.20
*********************************************************************************/
查詢表中記錄總數:(無欄位名字)
select count() from usertable;
或:(userid 為欄位名字,結果是欄位的總行數)
select count(*) userid from Student;

查詢欄位的平均值:
selecet avg(Sno) from Student;
select avg(欄位名)from 表名;

給出查詢的欄位的平均值取別名:
select avg(欄位名) as (別名) from (表名);

查找指定的欄位的其他欄位
select Sdept,Ssex,Sname
from Student
where Sno=3;
(where Sname='mary1';或則where Sname like 'mary1';)

在between語句查詢的都是在and之間的所有值而IN語句則必須是in括弧裡面的值.
select Sno,Ssex,Sname from Student where Sdept between 180 and 190;

select Sno,Ssex,Sname from Student where Sdept in (172,190);

查詢Student表中的所有的名字中的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';
注:%%之間是把所有的String類型的值

like和where條件查詢
select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;

查詢Student表中的所有的名字中間有mary的所有名字對應的的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
注:mary1,1mary,marydsajdh,等.

注意:and or not 用的時候,and是用在連接並列條件的2個不同的欄位
or是用在選擇的2個不同的欄位之間,not一般用於not in(180,190)之間.
order by 和asc|desc的一點不同:
order by是按先進先排,desc是先進後排,asc和desc是排列順序不一樣.

disctinct條件查詢
distinct 這個關鍵字來過濾掉多餘的重復記錄只保留一條,

select distinct name from table 表示將返回table表中name欄位不重復的所有欄位的集合。

註:distinct必須放在開頭,select id distinct name from table 是錯誤的!

-------------------------------------------------------------------------------------
表TEST_1:
id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77
-------------------------------------------------------------------------------------

select distinct(name1) from test_1

結果:
name1
aaa
bbb
ccc
ddd
eee
distinct這個關鍵字來過濾掉多餘的重復記錄只保留一條,但往往只用它來返回不重復記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標欄位,而無法返回其它欄位,即上表中只能返回name1欄位的所有不重復記錄集合。

-------------------------------------------------------------------------------------
如果現在想查詢出表test_1中所有name1不重復的id和name1欄位的記錄呢?

select distinct name, id from table

結果:
name1 id
aaa 9
bbb 5
bbb 8
ccc 3
ccc 4
ddd 6
eee 7

並不是我們所想要的結果

select distinct name,id from table 作用了兩個欄位,也就是必須得id與name都相同的才會被排除,即返回去除table表中id和name兩個欄位同時相同情況下所有集合。
-------------------------------------------------------------------------------------

如果現在想查詢出表test_1中所有name1不重復的所有欄位的記錄呢?

對於
select * from test_1 where name1 in (select distinct name1 from tablename)
等價於
select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')
我們很可能認為它是可行的,但實際上結果卻是:

id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77

正確sql應該是:
select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id

min(id)或max(id)都行,order by id 可要可不要.這里用內連接實現聯合查詢,也可以用where語句

select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id

-------------------------------------------------------------------------------------

**********************************************************************************
聯合查詢
**********************************************************************************
查詢表中的各個欄位的值
select Sno,Sname,Ssex,Sdept from Student;

多表查詢(2個表,publishtable和publishtable,給表起了別名)
select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;

多表查詢(3個表employees,departments和locations表,給表起別名)
(從多表中查詢出所有姓smith的雇員的名字,所在部門以及部門所在的城市)
select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';

***********************************************************************************
聯合查詢
***********************************************************************************

等值連接
/*將books表和表bookstype中的信息聯合查詢,條件是聯系鍵相等*/
select * from books,bookstype where bookstype.typeid = books.typeid

內連接
/*將books表和表bookstype中的信息聯合查詢,條件是聯系鍵相等,和等值連接等價*/
select * from books inner join bookstype on books.typeid = bookstype.typeid

左外連接

/*將books表和表bookstype中的信息聯合查詢,包括在books表中沒有和bookstype表關聯的信息*/
select * from books left outer join bookstype on bookstype.typeid = books.typeid

右外連接

/*將bookstype表和books表中的信息聯合查詢,包括在bookstype表中沒有和books表關聯的信息*/
select * from books right outer join bookstype on bookstype.typeid = books.typeid

全連接

/*將bookstype表和books表中的信息聯合查詢,包括在books表中沒有和bookstype表關聯的信息以及在bookstype表中沒有和books表關聯的信息*/

select * from books full outer join bookstype on bookstype.typeid = books.typeid

***********************************************************************************
聯合查詢
***********************************************************************************
多表查詢應該注意的幾點:
多表查詢和單表查詢的不同在於多表查詢在查詢某個欄位的時候應該帶上表名
格式是:表名.欄位名,表名.欄位名
select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name
from bbs,bbsr
where bbs.id=bbsr.id;
一般的在多表查詢中的表名取的麻煩用別名來代替
如下:
select b.id,b.name,b.dep,c.id,c.name
from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取別名也可以用空格或則用as.
where b.id=c.id;

*************************************************************************************
分組查詢
*************************************************************************************

在select 語句中可以使用group by 子句將行劃分成較小的組,然後,使用聚組函數返回每一個組的匯總信息,另外,可以使用having子句限制返回的結果集。group by 子句可以將查詢結果分組,並返回行的匯總信息SQLServer 按照group by 子句中指定的表達式的值分組查詢結果。

-------------------------------------------------------------------------------------
分組查詢一般是用來進行統計需求的,要進行分組查詢必須使用group by子句或having子句,在分組統計時要用到SQL的多行存儲函數。在where條件中不能使用多行存儲函數.

查詢語句的select 和group by ,having 子句是聚組函數唯一出現的地方,在where 子句中不能使用聚組函數。

在帶有group by 子句的查詢語句中,在select 列表中指定的列要麼是group by 子句中指定的列,要麼包含聚組函數.
------------------------------------------------------------------------------------

部門表department:

department_id department_name
10 開發部
20 測試部
30 用服部
40 財務部
50 培訓部

雇員表employees:(department_id為外鍵)

id employees_name department_id
1 cheng 10
2 zhou 50
3 liguo 10
4 wang 20
5 feng 30
6 ling 30
7 wu 20
8 tang 20
9 yang 40
10 tan 50
------------------------------------------------------------------------------------

按部門編號統計出表employees中的每個部門的人數(group by分組查詢)
select department_id, count(*) from employees
group by department_id;

顯示出部門人數少於5人的部門編號以及人數( 按照department_id來分組,having count(*)<5做為限制條件 )
select department_id 部門號, count(*) 部門人數 from employees
group by department_id
having count(*)<5;
--------------------------------------
(注意:having必須在group by子句的後面)
--------------------------------------
圖:
部門號 部門人數
------------------------------
10 2
20 3
30 2
40 1
50 2
-------------------------------------------------------------------------------------
where子句和having子句可以同時使用,where子句是對要分組的行進行過濾,即選擇要分組的行;
而having子句是對分組後的數據進行過濾。此時where子句必須在group by...having子句之前
-------------------------------------------------------------------------------------
顯示出所有工資大於5000,且部門人數大於5個的部門號,部門最低工資和部門人數

select department_id 部門號(記住department_id 和部門號之間要空格), min(salary) 最低工資,count(*) 部門人數 from employees
where salary >5000
group by department_id
having count(*)>5;

圖:
--------------------------------------
部門號 最低工資 部門人數
80 6100 34
100 6800 6

group by 按照哪個欄位來排序查詢,一般的group by和having一起使用,注意在查詢中只能查詢與group by和having有關的欄位。
--------------------------------------

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用where條件顯示特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用having 條件顯示特定的組,也可以使用多個分組標准進行分組。

查詢每個部門的每種職位的雇員數(待測試...)
select deptno,job,count(*) from emp group by deptno,job;

*********************************************************************************
數據排序
*********************************************************************************

order by子句中可以用asc(升序)和desc(降序)來完成相應的排序,默認時是按找asc(升序)。
---------------------------------------------------------------------------------
顯示出所有工資大於5000,且部門人數大於5個的部門號,部門最低工資和部門人數,並要求按照部門人數降序排序.

select department_id 部門號(記住department_id 和部門號之間要空格), min(salary) 最低工資,count(*) 部門人數 from employees
where salary >5000
group by department_id
having count(*)>5
order by count(*)desc
-------------------------------------------------------------------
(注意:當對分組查詢後的結果進行排序時,order by 必須在group by之後)
-------------------------------------------------------------------

圖:
--------------------------------------
部門號 最低工資 部門人數
80 6100 34
100 6800 30
90 6500 28
70 6300 25

*******************************************************************************
子查詢
*******************************************************************************

-----------------------------------------------------------------------------------------------------
子查詢是一個在select查詢中含有其他的select語句,子查詢通常用在where子句中,即將一個查詢結果做為查詢的條件.
-----------------------------------------------------------------------------------------------------
統計表employees中所有工資小於平均工資的人數
select count(*)工資 from employees
where salary <
(select avg(salary) from employees)
圖:
----------------
工資
56
49
36

Select MIN(Salary),Manager_id
from Employee
group by Manager_id
having MIN(Salary) >
(Select MIN(Salary)
From Employee
where Manager_id=004);

注意在多表查詢中返回的值應該是一個唯一確定的值,而不應該是多中值。
select Employee_id,Last_name,Salary,Manager_id
from Employee
WHERE Salary>
(select Salary
from Employee
where Manager_id=003)
and
Last_name= (select Last_name
from Employee
where Last_name like 'mary');

注意在any,or,all的區別:
Select Salary,Manager_id,Last_name,Employee_id
from Employee
where Salary < any
(Select Salary
From Employee
where Manager_id=005);

Select Salary
From Employee
where Manager_id=005;返回的是2000,2500
就是在工資中小於2000.2500其中一個就可以了,而ALL則必須是小於2000和2500其中任何一個
。而or則是和and用在一起的.

******************************************************************************************
集合運算
******************************************************************************************

---------------------------------------------------------------------------------
集合運算是將2個或多個子查詢結果進行(並union),交(intersect)和減(minus)
---------------------------------------------------------------------------------
(並union):
select employee_id,empname from emp1
union
select employee_id,name from emp2

圖:
-----------------
employee_id empname
100 king1
1000 king2
1000 king3
10000 king4
100000 king5
1000000 king6

注:使用union,重復行只包括一個,當使用union all時將包括重復行

交(intersect):2個或多個子查詢的公共行
select employee_id,empname from emp1
intersect
select employee_id,name from emp2

減(minus):從第一個查詢結果中去掉出現在第二個查詢結果中的行:
select employee_id,empname from emp1
minus
select employee_id,name from emp2

*****************************************************************************************
視圖,存儲過程和觸發器
*****************************************************************************************

創建視圖:(查詢數據,用於系統統計報表)
create view dept_sum_vu
(name,minsal,maxsal,avgsal)
as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)
from employees e,departments d
where e.department_id = d.department_id
group by d.department_name;

存貯過程,觸發器和刪除外鍵

1).存貯過程:
存貯過程的路徑:打開Stored Proceres中new一個新的Stored Proceres,中間填寫代碼,代碼如下:
CREATE PROCEDURE sa.bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

CREATE PROCEDURE bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

2).觸發器

打開用戶表項,點設計表,選中其中一個欄位,右鍵task點manager triggers,在彈出的表單中寫代碼:
CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]
FOR DELETE
AS
BEGIN
DELETE rebbs
FROM bbs, deleted
WHERE rebbs.bbs_id = bbs.bbsid
AND bbs.area_id = deleted.id

DELETE bbs
FROM deleted
WHERE bbs.area_id = deleted.id

END

3).刪除外鍵
打開用戶表項,點設計表,選中其中一個欄位,右鍵relationships,在彈出的主鍵和外鍵中選擇就可以了.
刪除外鍵,需要先刪除主鍵表裡面的有關外鍵的欄位,再來刪除外鍵的有關欄位.

⑶ sql語句"and" 、"or"用法

AND的語義是:二者必須滿足才為RTUE;
OR的語義是:二者只要有一個滿足就為TRUE,言外之意,二者同時滿足也為TRUE。

where A=1 and b <> 2 and b<> 3

⑷ SQL中的not between and 包括等號嗎

between
and是包括等號的,如果是not的話就應該是不包括的。這個很容易驗證。可以進行如下驗證:between
2
and
5看看包不包括2和5,然後再加上not進行檢索即可驗證

⑸ not or and優先順序順序

SQL中,where 後面如果有and,or的條件,則or自動會把左右的查詢條件分開,即先執行and,再執行or。原因就是:and的執行優先順序最高!
關系型運算符優先順序高到低為:not and or

⑹ SQL中 IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted) 中

1是常量,在這里只是代表存在
如果inserted或deleted表中無數據,那麼select不會出數據
如果表中有數據,select會顯示1
這里寫1與*作用相同,exists只判斷是否有數據,不會將數據輸出

⑺ sql2008 not,and, or 的作用

or意思是:其中一個條件滿足就返回結果,
and 意思是:二者滿足時就返回結果

not 是取反的意思,如not in() 等有好多地方用not

⑻ SQL中的not between and 包括等號嗎

具體的資料庫是不一樣的,有的數據包括有的不包括,sql server中 between and 包括等於的,那麼 not between and 就不包括等於,你可以在你的資料庫上試一試。

⑼ SQL語句中各個連接的用法和區別

1、顯示資料庫列表。
show databases;
剛開始時才兩個資料庫:mysql和test。mysql庫很重要它裡面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。
2、顯示庫中的數據表:
use mysql; //打開庫,學過FOXBASE的一定不會陌生吧
show tables;
3、顯示數據表的結構:
describe 表名;
4、建庫:
create database 庫名;
5、建表:
use 庫名;
create table 表名 (欄位設定列表);
6、刪庫和刪表:
drop database 庫名;
drop table 表名;
7、將表中記錄清空:
delete from 表名;
8、顯示表中的記錄:
select * from 表名;
三、一個建庫和建表以及插入數據的實例
drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default 』深圳』,
year date
); //建表結束
//以下為插入欄位
insert into teacher values(』』,』glchengang』,』深圳一中』,』1976-10-10』);
insert into teacher values(』』,』jack』,』深圳一中』,』1975-12-23』);
註:在建表中(1)將ID設為長度為3的數字欄位:int(3)並讓它每個記錄自動加一:auto_increment並不能為空:not null而且讓他成為主欄位primary key(2)將NAME設為長度為10的字元欄位(3)將ADDRESS設為長度50的字元欄位,而且預設值為深圳。varchar和char有什麼區別呢,只有等以後的文章再說了。(4)將YEAR設為日期欄位。
如果你在mysql提示符鍵入上面的命令也可以,但不方便調試。你可以將以上命令原樣寫入一個文本文件中假設為school.sql,然後復制到c:\\下,並在DOS狀態進入目錄[url=file://\\mysql\\bin]\\mysql\\bin[/url],然後鍵入以下命令:
mysql -uroot -p密碼 < c:\\school.sql
如果成功,空出一行無任何顯示;如有錯誤,會有提示。(以上命令已經調試,你只要將//的注釋去掉即可使用)。
四、將文本數據轉到資料庫中
1、文本數據應符合的格式:欄位數據之間用tab鍵隔開,null值用[url=file://\\n]\\n[/url]來代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、數據傳入命令 load data local infile \"文件名\" into table 表名;
注意:你最好將文件復制到[url=file://\\mysql\\bin]\\mysql\\bin[/url]目錄下,並且要先用use命令打表所在的庫。
五、備份資料庫:(命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目錄下執行)
mysqlmp --opt school>school.bbb
注釋:將資料庫school備份到school.bbb文件,school.bbb是一個文本文件,文件名任取,打開看看你會有新發現。

⑽ 求一句sql語句

需告訴各數據表欄位含義
方可准確寫出語句。
大致是:
select a.RoomID,a.RoomName from Room a,CheckIN b where a.Type='房間指定類型'
and not [(起始日期<=b.CheckInTime and b.CheckInTime=<結束日期) or
起始日期<=b.CheckOutTime and b.CheckOutTime<=結束日期)]
and a.RoomID=b.RoomID

CheckInTime CheckOutTime 兩欄位分別是客人進入房間時間 離開房間時間
預定房間不知哪個欄位

熱點內容
手機怎樣給程序加密軟體 發布:2025-01-12 06:47:11 瀏覽:824
地平線最高畫質筆記本要什麼配置才能玩 發布:2025-01-12 06:47:10 瀏覽:369
原神過主線任務腳本 發布:2025-01-12 06:34:51 瀏覽:514
醫保電子密碼在哪裡找到 發布:2025-01-12 06:34:38 瀏覽:349
安卓手機有網卻不能使用怎麼辦 發布:2025-01-12 06:25:20 瀏覽:213
arm存儲器映射 發布:2025-01-12 06:25:12 瀏覽:250
安卓系統個人字典有什麼用 發布:2025-01-12 06:13:37 瀏覽:929
geventpython安裝 發布:2025-01-12 06:13:34 瀏覽:339
放鬆解壓助睡眠直播 發布:2025-01-12 06:13:00 瀏覽:829
車載wince和安卓哪個好用 發布:2025-01-12 05:58:18 瀏覽:840