當前位置:首頁 » 編程語言 » gmeworldsql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

gmeworldsql

發布時間: 2023-05-14 14:29:09

sql語句咋寫

select * from world
where (area > 3000000 and population < 250000000)
or (area < 3000000 and population > 250000000);
或者
select * from (
select *,
case when area > 3000000 then 1 else 0 end as area_flag,
case when population > 250000000 then 1 else 0 end as population_flag
from world
) as x
where area_flag + area_flag = 1;

㈡ 進入mysql控制台後執行sql腳本的方法

使用source命令執行sql腳本。
進入mysql的控制台後,使用source命令執行
Mysql>source 【sql腳本文件的路徑全名】
具體步驟:
假設運行sql腳本是hello.sql,在控制台下輸入:
mysql>source c:\hello world\hello.sql(注意路徑不用加引號) 或者 \. c:\hello world\hello.sql
然後回車即可

㈢ SQL索引問題

表的索引與字典中的索引非常相似。它可以極大地提高查詢的速度。對一個較大的表來說,通過加索引,一個通常要花費幾個小時來完成的查詢只要幾分鍾就可以完成。(對於包含索引的資料庫,SQL Sever需要一個可觀的額外空間。例如,要建立一個聚簇索引,需要大約1.2倍於數據大小的空間。速度是需要付出代價的。)

聚簇索引和非聚簇索引

假設你已經通過字典的索引找到了一個字所在的頁碼。一旦已經知道了頁碼後,你很可能隨機的翻尋字典,直至找到正確的頁碼。這里還有一種找到頁碼的更有效的方法。
首先,把字典翻到大概一半的地方,如果要找的頁碼比半本字典處的頁碼小,就翻到四分之一處,否則,就把書翻到四分之三的地方。通過這種方法,你可以繼續把字典分成更小的部分,直至找到正確的頁碼附近。這是找到書頁的非常有效的一種方法。(呵呵,到處都是這個例子,跟Hello world有一拼)SQL Sever的表索引以類似的方式工作。一個表索引由一組頁組成,這些頁構成了一個樹形結構。根頁通過指向另外兩個頁,把一個表的記錄從邏輯上分成和兩個部分。而根頁所指向的兩個頁又分別把記錄分割成更小的部分。每個頁都把記錄分成更小的分割,直至到達葉級頁。

索引有兩種類型:聚簇索引和非聚簇索引。

在聚簇索引中,索引樹的葉級頁包含實際的數據:記錄的索引順序與物理順序相同。
在非聚簇索引中,葉級頁指向表中的記錄:記錄的物理順序與邏輯順序沒有必然的聯系。

聚簇索引非常象目錄表,目錄表的順序與實際的頁碼順序是一致的。非聚簇索引則更象書的標准索引表,索引表中的順序通常與實際的頁碼順序是不一致的。一本書也許有多個索引。例如,它也許同時有主題索引和作者索引。同樣,一個表可以有多個非聚簇索引。

通常情況下,你使用的是聚簇索引,但是你應該對兩種類型索引的優缺點都有所理解。

每個表只能有一個聚簇索引,因為一個表中的記錄只能以一種物理順序存放。通常你要對一個表按照標識欄位建立聚簇索引。但是,你也可以對其它類型的欄位建立聚簇索引,如字元型,數值型和日期時間型欄位。
從建立了聚簇索引的表中取出數據要比建立了非聚簇索引的錶快。當你需要取出一定范圍內的數據時,用聚簇索引也比用非聚簇索引好。例如,假設你用一個表來記錄訪問者在你網點上的活動。如果你想取出在一定時間段內的登錄信息,你應該對這個表的DATETIME型欄位建立聚簇索引。
對聚簇索引的主要限制是每個表只能建立一個聚簇索引。但是,一個表可以有不止一個非聚簇索引。實際上,對每個表你最多可以建立249個非聚簇索引。你也可以對一個表同時建立聚簇索引和非聚簇索引。
假如你不僅想根據日期,而且想根據用戶名從你的網點活動日誌中取數據。在這種情況下,同時建立一個聚簇索引和非聚簇索引是有效的。你可以對日期時間欄位建立聚簇索引,對用戶名欄位建立非聚簇索引。如果你發現你需要更多的索引方式,你可以增加更多的非聚簇索引。
非聚簇索引需要大量的硬碟空間和內存。另外,雖然非聚簇索引可以提高從表中取數據的速度,它也會降低向表中插入和更新數據的速度。每當你改變了一個建立了非聚簇索引的表中的數據時,必須同時更新索引。因此你對一個表建立非聚簇索引時要慎重考慮。如果你預計一個表需要頻繁地更新數據,那麼不要對它建立太多非聚簇索引。另外,如果硬碟和內存空間有限,也應該限制使用非聚簇索引的數量。

索引屬性

這兩種類型的索引都有兩個重要屬性:
你可以用兩者中任一種類型同時對多個欄位建立索引(復合索引);
兩種類型的索引都可以指定為唯一索引。
你可以對多個欄位建立一個復合索引,甚至是復合的聚簇索引。假如有一個表記錄了你的網點訪問者的姓和名字。如果你希望根據完整姓名從表中取數據,你需要建立一個同時對姓欄位和名字欄位進行的索引。這和分別對兩個欄位建立單獨的索引是不同的。當你希望同時對不止一個欄位進行查詢時,你應該建立一個對多個欄位的索引。如果你希望對各個欄位進行分別查詢,你應該對各欄位建立獨立的索引。
兩種類型的索引都可以被指定為唯一索引。如果對一個欄位建立了唯一索引,你將不能向這個欄位輸入重復的值。一個標識欄位會自動成為唯一值欄位,但你也可以對其它類型的欄位建立唯一索引。假設你用一個表來保存你的網點的用戶密碼,你當然不希望兩個用戶有相同的密碼。通過強制一個欄位成為唯一值欄位,你可以防止這種情況的發生。

㈣ 如何對SQL中的所有資料庫執行腳本

以sqlserver為例

首先創建一張表

createtabledatabase_info
(databasenamevarchar(50));

然後,將所有資料庫名的信息錄入到這張表中。這步可參考sqlserver中都有哪些資料庫。

然後,執行存儲過程:

declare@sqlnvarchar(4000),@iint,@maxdatabase
select@maxdatabase=count(*)fromdatabase_info
set@i=1
while@i<=@maxdatabase
begin
set@sql='update'
select@sql=sql+datebase_namefromdatabase_infowhereid=@i
select@sql=sql+'.master.dbo.tbl1settbl1.aaa=tbl2.bbbfrom'
select@sql=sql+datebase_namefromdatabase_infowhereid=@i
eselect@sql=sql+'.master.dbo.tbl2wheretbl1.ccc=tbl2.ccc'
execsp_executesql@sql
set@i=@i+1
end

注意事項:其中update語句,可根據自己的實際需要進行修改。

㈤ 一、用World資料庫,用SQL寫出下面的查詢:

use world;
#壽命最長國家;
select * from country
where LifeExpectancy=(select max(LifeExpectancy) from country ) ;
#壽命最短國家;
select * from country
where LifeExpectancy=(select min(LifeExpectancy) from country);
#洲人口統計;
select Continent,sum(Population) as Population from country group by Continent;

#國家及首都;
select c.name as country_name,cc.name as capital_name from country c inner join city cc on c.capital=cc.id ;
#人口最多的豎碼城市及該城市所在國家;
select city.name as city_name,city.Population,Country.name as country_name from city inner join country on city.CountryCode=country.code where city.population=(select max(Population) from city);
測試通過拿羨!消纖拍

㈥ 求一份openGauss常用SQL示例 做個簡單的入門練手測試~

如下羅列了一些創建、增、刪、改、查相關,請參考(涉及的具體語法及參數自行查閱官方文檔):
--1.CREATE USER
--創建用戶jim,登錄密碼為xxxxxxxxx。
openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';

--下面語句與上面的等價。
openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';

--如果創建有「創建資料庫」許可權的用戶,則需要加CREATEDB關鍵字。
openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';

--將用戶jim的登錄密碼由xxxxxxxxx修改為Abcd@123。
openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';

--為用戶jim追加CREATEROLE許可權。
openGauss=# ALTER USER jim CREATEROLE;

--將enable_seqscan的值設置為on, 設置成功後,在下一會話中生效。
openGauss=# ALTER USER jim SET enable_seqscan TO on;

--重置jim的enable_seqscan參數。
openGauss=# ALTER USER jim RESET enable_seqscan;

--鎖定jim帳戶。
openGauss=# ALTER USER jim ACCOUNT LOCK;

--刪除用戶。
openGauss=# DROP USER kim CASCADE;
openGauss=# DROP USER jim CASCADE;
openGauss=# DROP USER dim CASCADE;

--2.創建和管理資料庫

--使用如下命令創建一個新的資料庫db_tpcc。
openGauss=# CREATE DATABASE db_tpcc;

註:
•資料庫名稱遵循SQL標識符的一般規則。當前角色自動成為此新資料庫的所有者。
•如果一個資料庫系統用於承載相互獨立的用戶和項目,建議把它們放在不同的資料庫里。
•如果項目或者用戶是相互關聯的,並且可以相互使用對方的資源,則應該把它們放在同一個資料庫里,但可以規劃在不同的模式中。模式只是一個純粹的邏輯結構,某個模式的訪問許可權由許可權系統模塊控制。
•創建資料庫時,若資料庫名稱長度超過63位元組,server端會對資料庫名稱進行截斷,保留前63個位元組,因此建議資料庫名稱長度不要超過63個位元組。

--查看資料庫
•使用\l元命令查看資料庫系統的資料庫列表。
openGauss=# \l

•使用如下命令通過系統表pg_database查詢資料庫列表。
openGauss=# SELECT datname FROM pg_database;

--修改資料庫
用戶可以使用如下命令修改資料庫屬性(比如:owner、名稱和默認的配置屬性)。
•使用以下命令為資料庫設置默認的模式搜索路徑。
openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;

--使用如下命令為資料庫重新命名。
openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;

--刪除資料庫
用戶可以使用DROP DATABASE命令刪除資料庫。這個命令刪除了資料庫中的系統目錄,並且刪除了磁碟上帶有數據的資料庫目錄。用戶必須是資料庫的owner或者系統管理員才能刪除資料庫。當有人連接資料庫時,刪除操作會失敗。刪除資料庫時請先連接到其他的資料庫。
使用如下命令刪除資料庫:
openGauss=# DROP DATABASE human_tpcds;

--3.CREATE TABLE
--表是建立在資料庫中的,在不同的資料庫中可以存放相同的表。甚至可以通過使用模式在同一個資料庫中創建相同名稱的表。創建表前請先規劃存儲模型。
openGauss=# CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);

當結果顯示為如下信息,則表示創建成功。
CREATE TABLE

其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的欄位名,integer、char(5)、char(6)和char(8)分別是這四欄位名稱的類型。

--4.向表中插入數據
--向表中插入數據前,意味著表已創建成功。
向表customer_t1中插入一行:
數據值是按照這些欄位在表中出現的順序列出的,並且用逗號分隔。通常數據值是文本(常量),但也允許使用標量表達式。
openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');

如果用戶已經知道表中欄位的順序,也可無需列出表中的欄位。例如以下命令與上面的命令效果相同。
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');

如果用戶不知道所有欄位的數值,可以忽略其中的一些。沒有數值的欄位將被填充為欄位的預設值。例如:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');

用戶也可以對獨立的欄位或者整個行明確預設值:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);
openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;

如果需要在表中插入多行,請使用以下命令:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(6885, 'maps', 'Joes'),
(4321, 'tpcds', 'Lily'),
(9527, 'world', 'James');
如果需要向表中插入多條數據,除此命令外,也可以多次執行插入一行數據命令實現。但是建議使用此命令可以提升效率。

如果從指定表插入數據到當前表,例如在資料庫中創建了一個表customer_t1的備份表customer_t2,現在需要將表customer_t1中的數據插入到表customer_t2中,則可以執行如下命令。
openGauss=# CREATE TABLE customer_t2
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);

openGauss=# INSERT INTO customer_t2 SELECT * FROM customer_t1;

從指定表插入數據到當前表時,若指定表與當前表對應的欄位數據類型之間不存在隱式轉換,則這兩種數據類型必須相同。

刪除備份表
openGauss=# DROP TABLE customer_t2 CASCADE;
在刪除表的時候,若當前需刪除的表與其他表有依賴關系,需先刪除關聯的表,然後再刪除當前表。

--5.更新表中數據
修改已經存儲在資料庫中數據的行為叫做更新。用戶可以更新單獨一行,所有行或者指定的部分行。還可以獨立更新每個欄位,而其他欄位則不受影響。

使用UPDATE命令更新現有行,需要提供以下三種信息:
•表的名稱和要更新的欄位名
•欄位的新值
•要更新哪些行

SQL通常不會為數據行提供唯一標識,因此無法直接聲明需要更新哪一行。但是可以通過聲明一個被更新的行必須滿足的條件。只有在表裡存在主鍵的時候,才可以通過主鍵指定一個獨立的行。

建立表和插入數據的步驟請參考創建表和向表中插入數據。

需要將表customer_t1中c_customer_sk為9527的地域重新定義為9876:
openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;

這里的表名稱也可以使用模式名修飾,否則會從默認的模式路徑找到這個表。SET後面緊跟欄位和新的欄位值。新的欄位值不僅可以是常量,也可以是變數表達式。

比如,把所有c_customer_sk的值增加100:
openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;

在這里省略了WHERE子句,表示表中的所有行都要被更新。如果出現了WHERE子句,那麼只有匹配其條件的行才會被更新。

在SET子句中的等號是一個賦值,而在WHERE子句中的等號是比較。WHERE條件不一定是相等測試,許多其他的操作符也可以使用。

用戶可以在一個UPDATE命令中更新更多的欄位,方法是在SET子句中列出更多賦值,比如:
openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;

批量更新或刪除數據後,會在數據文件中產生大量的刪除標記,查詢過程中標記刪除的數據也是需要掃描的。故多次批量更新/刪除後,標記刪除的數據量過大會嚴重影響查詢的性能。建議在批量更新/刪除業務會反復執行的場景下,定期執行VACUUM FULL以保持查詢性能。

--6.查看數據
使用系統表pg_tables查詢資料庫所有表的信息。
openGauss=# SELECT * FROM pg_tables;

使用gsql的\d+命令查詢表的屬性。
openGauss=# \d+ customer_t1;

執行如下命令查詢表customer_t1的數據量。
openGauss=# SELECT count(*) FROM customer_t1;

執行如下命令查詢表customer_t1的所有數據。
openGauss=# SELECT * FROM customer_t1;

執行如下命令只查詢欄位c_customer_sk的數據。
openGauss=# SELECT c_customer_sk FROM customer_t1;

執行如下命令過濾欄位c_customer_sk的重復數據。
openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1;

執行如下命令查詢欄位c_customer_sk為3869的所有數據。
openGauss=# SELECT * FROM customer_t1 WHERE c_customer_sk = 3869;

執行如下命令按照欄位c_customer_sk進行排序。
openGauss=# SELECT * FROM customer_t1 ORDER BY c_customer_sk;

--7.刪除表中數據
在使用表的過程中,可能會需要刪除已過期的數據,刪除數據必須從表中整行的刪除。

SQL不能直接訪問獨立的行,只能通過聲明被刪除行匹配的條件進行。如果表中有一個主鍵,用戶可以指定準確的行。用戶可以刪除匹配條件的一組行或者一次刪除表中的所有行。

使用DELETE命令刪除行,如果刪除表customer_t1中所有c_customer_sk為3869的記錄:
openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;

如果執行如下命令之一,會刪除表中所有的行。
openGauss=# DELETE FROM customer_t1;

openGauss=# TRUNCATE TABLE customer_t1;
全表刪除的場景下,建議使用truncate,不建議使用delete。

刪除創建的表:
openGauss=# DROP TABLE customer_t1;

㈦ 如何在sql語句中使用正則表達式

sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。

1、regexp_like:

regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:

'c' 說明在進行匹配時區分大小寫(預設值);

'i' 說明在進行匹配時不區分大小寫;

'n' (.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、

'm' 字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、

示例:

select * from emp where regexp_like(ename,'^a[a-z]*n$');

可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是

select * from emp where regexp_like(ename,'^a[a-z]*n$','i')

則可以查找ename為Arwen的行記錄。

2、regexp_instr:

REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數 INSTR(),參數相關:

'start' 開始查找的位置;

'occurrence' 說明應該返回第幾次出現pattern的位置;

'return_option' 說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後 的字元的位置;

'match_option' 修改默認的匹配設置.與regexp_like裡面的相同.

示例:

DECLARE

V_RESULT INTEGER ;

BEGIN

SELECT REGEXP_INSTR('hello world','o',1,1,0) INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為5,即字母o第一個次出現的位置。

如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。

如果regexp_instr('hello world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.

3、regexp_replace:

REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數 REPLACE(),參數同REGEXP_INSTR函數

示例:

DECLARE

V_RESULT varchar2(90);

BEGIN

SELECT REGEXP_REPLACE('hello world','o','x',1,1) INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為hellx world.

如果REGEXP_REPLACE('hello world','o','x'),則結果為hellx wxrld.

如果 REGEXP_REPLACE('hello world','o','x',1,2)則結果為hello wxrld.

4、regexp_substr:

REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用於在x中查找pattern並返回。可以參考字元串函數 SUBSTR(),參數同REGEXP_INSTR函數.

例如:

DECLARE

V_RESULT VARCHAR2(255);

BEGIN

SELECT REGEXP_SUBSTR('hello world','l{2}') INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END ;

結果為ll

查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。