SQL簡介&資料表分析&資料查詢
SQL指的是結構化的查詢語句
SQL有幾個子類:DML:資料的更新與查詢操作(SELECT,FROM,INSERT,GROUPBY,HAVING,WHERE,UPDATE,DELECT),DDL:資料庫物件的定義語句,DCL
scott使用者表
首先如果想知道某一個使用者(模式)所有的資料表,可使用如下語法完成:
CONNECT scott/tiger;
SET LINESIZE 300;
SET PAGESIZE 30;
SELECT*FROM tab;
此時想要看錶結構,可使用:DESC dept;
簡單查詢的SQL語法結構如下所示:([]表示可選)
簡單查詢中的最大特徵在於:控制資料列,但是它無法進行資料行的控制
(b)SELECT [DISTINCT]*| 列[別名],列[別名],.......
(a)FROM 表名稱 [別名];
如果在SELECT子句中使用了"*"表示的是查詢一張表中的所有資料列,FROM子句是確定資料來源,來源只要是表結構(行與列的集合),而SELECT子句控制的是需要的資料列(資料的投影:控制所需要顯示的資料列)。
除了進行基本的查詢列之外,在簡單查詢之中也支援四則運算,並且可以直接使用列的內容進行四則運算。為了達到美觀,可以進行別名設定。實際上在以後定義資料表名稱或者列名稱的時候中文也支援,但是如果你想你的開發正常點,別用中文。
實際上在進行簡單查詢的過程之中,還支援資料的連線操作,使用“||”進行連線。可以將連線變得好看些,可以中間使用一些文字描述,對於固定的輸出類容的處理暫時只考慮兩種型別的資料:
普通數字:那麼直接編寫(SELECT ename ||1 FROM emp;)
字串:使用單引號宣告(SELECT empno||‘hello’ FROM emp;)
在簡單查詢的操作之中還存在一個DISTINCT關鍵字,此關鍵字主要目的是消除重複內容。但是需要提醒的是,如果是消除重複內容,指的是查詢出來的資料所有列的內容都重複。
SQL限定查詢(SQL語句的執行順序,限定符號的使用)
如果想要對所選擇的資料進行控制,那麼可以利用WHERE子句完成,此時的SQL語法結構變為如下形式:
【c.選出所需要的資料列】SELECT [DISTINCT]*| 列[別名],列[別名],.......
【a.確定資料來源】FROM 表名稱 [別名];
【b.篩選資料行】[WHERE 限定條件(s)];
SELECT子句是整個語法最後才會執行到的子句。但是如果要進行資料篩選,必須要使用若干個條件判斷符:
關係執行:>、=、<、>=、<=、!=(<>);(=可以在數字上使用,也可在字串上使用)
範圍運算:BETWEEN...AND;
空判斷:IS NULL、IS NOT NULL;
IN判斷:IN、NOT IN、exists()(複雜查詢);
模糊查詢:LIKE、NOT LIKE。
以上的限定符都只能判斷一次,如果現在有若干個限定符,那麼就需要進行若干個限定符的連線,可以使用邏輯運算:AND(與)、OR(或)、NOT(非);
以上所給出的判斷符是SQL中的標準支援,其他的不同資料庫有可能有自己的擴充的內容
邏輯運算:()可以保證連線多個條件,如果要連線主要使用AND,OR完成;(連線得越多,執行效率越低)
在Oracle中所有運算子都不受資料型別的控制,在之前使用的是數字進行了判斷,那麼除了數字外,也可以用字串或者是日期進行判斷。(字串的意義不大)
日期判斷:
SELECT*
FROM emp
WHERE hiredate BETWEEN ‘01-1月-81’ AND ‘31-12月-1981’;
空判斷:
null從資料庫定義上來講屬於一個未知的資料,任何情況下如果任何一個數字與null進行計算,那麼結果還是null
SELECT null+1 FROM emp;
在某些資料列上是允許存在有null值的,但是對於null不能夠使用關係運算判斷。關係可以判斷的是資料,null不是空字串也不是數字0,所以在SQL之中只能通過IS NULL來判斷為空,以及IS NOT NULL(NOT 欄位 IS NULL)判斷不為空。
IN操作符(謂詞IN)
IN指的是根據一個指定的範圍進行資料查詢
WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999;VS WHRER empno IN(7369,7566,7788,9999);後者效能更好,但是需要由一個特別提出的注意點。在使用IN操作的時候實際上也可以使用NOT IN,那麼這個表示的是不在範圍之中,而問題也就從NOT IN開始。在使用NOT IN的時候如果查詢的資料範圍之中包含有null值,那麼不會有任何結果返回,IN操作無此限制。
模糊查詢:LIKE(核心)
LIKE可以實現資料的模糊查詢操作,如果要想使用LIKE則必須使用如下兩個匹配符號:
“_”:匹配任意的一位符號;
“%”:匹配任意的符號(包含匹配0位、1位、多位)
如:查詢所v有僱員姓名中以字母A開頭的僱員資訊
第一個字母A是固定的,而後的內容隨意:WHERE ename LIKE ‘A%’;
查詢所有僱員姓名中第二個字母是M的所有僱員:(第一位可以任意,但必須佔一位使用“_”;後面的位隨意,使用“%”)WHERE ename LIKE ‘_M%’;
查詢僱員姓名中任意位置上存在有字母A的僱員資訊:(開頭、結尾、中間都可以,使用“%A%”;)
關於LIKE的兩點說明:
如果在使用LIKE進行限定查詢的時候,沒有設定任何的關鍵字,那麼表示查詢全部;
LIKE可以在任意的資料型別上使用(原生支援),雖然所有的資料型別都支援LIKE,但是往往會在字串上使用,且所有的搜尋引擎不會用LIKE。
查詢排序:ORBER BY子句
如果說早預設情況下資料查詢的時候,它會按照自然排序的進行資料的排列,所有的自然順序是不可控的,所有往往都會由使用者自己來進行排序操作,那麼這個時候就可以使用ORDER BY子句,而此時的SQL語句結構就變為了如下形式:
【c.選出所需要的資料列】SELECT [DISTINCT]*| 列[別名],列[別名],.......
【a.確定資料來源】FROM 表名稱 [別名];
【b.篩選資料行】[WHERE 限定條件(s)];
【d.資料排序】[ORDER BY 排序欄位[ASC|DESC],排序欄位[ASC|DESC],...]
既然ORDER BY是在SELECT子句之後執行,那麼就意味著ORDER BY可以使用SELECT子句定義的別名
排序可以在任意資料型別上執行,包括字串,日期都可以。
除了可以進行單一欄位的排序,也可以進行欄位的混合排序操作。指的是可以進行若干個欄位的排序。
eg:按照工資由高到低排序,如果工資相同,則按照僱傭日期由早到晚排序
ORDER BY sal DESC ,hiredate;
所有的排序操作都是在WHERE篩選之後進行的。
總結:1.SELECT子句確定資料列;
2.WHERE子句控制資料行;
3.ORDER BY子句永遠最後執行
索引:
1) 索引應該在SQL語句的"where"或"and"部分涉及的表列(也稱謂詞)被建立。假如:personnel表的"firstname"表列作為查詢結果顯示,而不是作為謂詞部分,則不論其值是什麼,該表列不會被索引。
2)使用者應該索引具有一定範圍的表列,索引時有一個大致的原則:如果表中列的值佔該表中行的2 0 %以內,這個表列就可以作為候選索引表列。假設: 一個表有36 000行且表中一個表列的值平均分佈(大約每12000行),那麼該表列不適合於一個索引。然而,如果同一個表中的其他表列中列值的行在1 0 0 0~15 0 0之間(佔3 %~4 % ),則該表列可用作索引。
3)如果在S Q L語句謂詞中多個表列被一起連續引用,則應該考慮將這些表列一起放在一個索引內, O r a c l e將維護單個表列的索引(建立在單一表列上)或複合索引(建立在多個表列上)。複合索引稱並置索引。
相關推薦
SQL簡介&資料表分析&資料查詢
SQL指的是結構化的查詢語句 SQL有幾個子類:DML:資料的更新與查詢操作(SELECT,FROM,INSERT,GROUPBY,HAVING,WHERE,UPDATE,DELECT),DDL:資料庫物件的定義語句,DCL
MySQL(04)——SQL語句之資料表內容的查詢
這個大概是使用最多的命令了。 因為平時插入資料都是程式寫好來插入的,自己不會手動插入資料; 建庫建表也不是自己操心的事; 修改資料的例子也很少; 刪除資料?這個事幾乎不幹。 剩下的也就是查詢資料了。 create table student( id int p
SQL SERVER匯出表中資料的sql指令碼形式
CREATE proc spGenInsertSQL (@tablename varchar(256)) as begin declare @sql varchar(8000) declare @sqlValues varchar(8000) set @sql =' (' set @sqlVal
tp5.1資料表的聯合查詢
資料表的聯合查詢本質上是找表的交集 先找交集再交叉並集 1 分別找到兩個表 2分別在兩張表裡找打符合join()裡的條件的表,在找到符合where條件裡的表 3兩張表裡的條件交叉並集 Db::name()->alias()->join()->wher
SQL 將一個表的資料插入到另一個表中
語法: 1.原來沒有的建立的表 select * into 表A form 表B where條件 2.原來存在的表 insert into 表A select * from 表B where 條件 示例: USE Student_Course2 IF EXISTS(SELE
SQL Server 複製表及資料的兩種方法
1、新表不存在(即複製資料的同時建立與舊錶相同結構的新表): select [col1,col2,col3...] into new_table from old_table where 1=1 2、新表已存在,從舊錶從插入選擇的資料(注意:表的[主鍵]不要複製,
OA專案中關於資料表遞迴查詢
例如知道某員工頂級部門id(企業id)需要查詢所有員工正常Oracle遞迴SELECT DISTINCT U.*,UD.ORDER_NUM FROM TBL_BASE_USER U ,TBL_BASE_USER_DEPT UD,(select*from tbl_base_de
SQL語句判斷表 資料庫 資料是否存在
Sql Server中判斷表或者資料庫是否存在 if exists(select 1 from master..dbo.sysdatabases where name='example')print 'DataBase existed'elseprint 'Databa
sql同一張表統計資料生成多個統計列
create view parkingcloudjournalstat as select enterdate, sum(case when parkingId = 'GhW4Hmsu' then 1 else 0 end) as "GhW4Hmsu", sum
ThinkPHP 3.2.3 資料表大小寫問題(查詢時候強制轉換小寫)解決辦法
ThinkPHP官方解決方案: //在配置中加入 'DB_PARAMS' => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL), // 資料庫連線
oracle 更資料表和資料列的SQL命令
建立資料表:CREATE TABLE test(USERNAME varchar(100), USERAGE int); 刪除資料表:DROP TABLE test; 更改資料表名: ALTER TABLE test_old RENAME TO test; 新增資料欄位:
mysql結構相同的資料表,資料合併到一個表
1、拼接生成批量插入語句 SELECT concat('insert into ordertarget(欄位名) select 欄位名 from ',table_name,';') FROM information_schema.TABLES WHERE table_name LIKE 'eco
如何對比mysql資料表的資料與excel表中資料是否重複?
一、利用excel比對 1、將mysql資料表匯出為excel 2、將表格資料與excel資料進行對比 方法一:函式COUNTIF IF(COUNTIF(資料庫資料所在的區域,目標值所在區域)=0,”不重複”,”“) 方法二:函式Ma
Mysql資料庫的基本操作--資料庫,資料表,資料的基本操作
- -資料庫的操作 連結資料庫:mysql -u使用者名稱 -p 密碼 退出資料庫:exit, quit, ctrl+d 檢視所有的資料庫:show databases; (注意命令後面要加分號 ;) 顯示時間:select now(); 顯示資料庫版
遊戲資料表的資料驅動
前言 之前博文介紹過了,一種程式碼匯出的工作方式《如何讓你的程式載入Excel配置檔案》。但這種方式存在一些弊端,比如如果想在執行時替換資料(Reload),就會比較困難(解釋執行語言例外)。但在目前的遊戲架構中,不論是客戶端還是伺服器,都強烈的具有這種需求。 主要思想
MySQL之終端(Terminal)管理資料庫、資料表、資料的基本操作
MySQL有很多的視覺化管理工具,比如“mysql-workbench”和“sequel-pro-”。 現在我寫MySQL的終端命令操作的文章,是想強化一下自己對於MySQL的理解,總會比使用圖形化的理解透徹,因為我本來就比較喜歡寫程式碼。同時寫出來這些文章,是想要給大家當個參考,希望也能對大家有所幫助,有所
資料表的資料的複製 (同一個庫 最簡單版本)
轉載地址 https://zhidao.baidu.com/question/309246555.html SQL Server中,如果目標表存在: 1 insert into 目標表 select * from 原表; SQL Server中,,如
pandas建立資料表及資料讀寫
import pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['
postgre刪除資料表重複資料
select distinct * into t_sup_supcomm_copy from t_sup_supcomm; drop table t_sup_supcomm; select * into t_sup_s
Informix資料表結構分析資料整理之欄位型別說明和查詢SQL語句
查詢所有Informix資料表字段型別SQL語句: select a.tabname,b.colname,b.coltype,case b.coltype when '0' then 'CHAR' when '1' then 'SMALLINT' when '2' the