<commit_before>---
layout: post
title: SQL 指令筆記
date: 1970-01-01 12:00
author: Poy
comments: true
categories: []
---
## 基本指令

```sql
UPDATE 表格 SET 欄位1 = '值1', 欄位2 = '值2' WHERE {條件} 
DELETE FROM 表格 WHERE {條件} 
INSERT INTO 表格名 (欄位1, 欄位2, ...) VALUES ('值1', '值2', ...) 
INSERT INTO "表格1" ("欄位1", "欄位2", ...) SELECT "欄位3", "欄位4", ... FROM "表格2";
```

## 查詢筆數重複的資料

依stud_no欄位查詢stud_no欄位資料重複的筆數

```sql
SELECT stud_no, COUNT(*) AS count
FROM student_data
GROUP BY stud_no
HAVING (COUNT(*) > 1)
```

## 查詢時顯示群組資料中最新一筆的資料(需要一個不重複的 Identity 欄位)

依Date欄位做判斷，顯示最新的紀錄

```sql
SELECT ID, Number, Price, Date 
FROM test AS T
WHERE Date IN (
		SELECT TOP 1 DATE
		FROM test
		WHERE ID = T.ID
		ORDER BY Date DESC
		)
```

## DB Link 連線至另一台資料庫做查詢的動作

參考文章：[SQL Server 使用 OpenQuery 以及傳遞參數](http://poychang.github.io/sql-server-open-query/)

先建立連結

```sql
exec sp_addlinkedserver 'CRMDB1','','SQLOLEDB','172.16.8.22'
exec sp_addlinkedsrvlogin 'CRMDB1','false',null,'sa','@@SAPass@@'
go
```

以下範例，在資料表前，先指定哪一個SQL Server

```sql
INSERT INTO Area 
SELECT * FROM CRMDB1.GDCRM.dbo.Area WHERE AreaID = 'US0002'
```

## 建立完DBlink後，可使用OPENQUERY的方式，對遠端資料庫做查詢

```sql
SELECT * FROM OPENQUERY(PROD, 'select sysdate from dual')
```

## 使用SQL指令取得資料表內的欄位名稱 

```sql
SELECT NAME
FROM SYSCOLUMNS
WHERE ID= Object_ID('[TableName]')
```

## INFORMATION_SCHEMA 是訊息資料庫，其中保存著關於資料庫伺服器所維護的所有其他資料庫的訊息

透過下列SQL，可找出有具有特定關鍵字的預存程序或函數

```sql<commit_msg>alter post<commit_after>---
layout: post
title: SQL 指令筆記
date: 1970-01-01 12:00
author: Poy
comments: true
categories: []
---
## 基本指令

```sql
UPDATE 表格 SET [欄位1] = '值1', [欄位2] = '值2' WHERE [條件] 
DELETE FROM [表格] WHERE [條件]
INSERT INTO [表格名] ([欄位1], [欄位2], ...) VALUES ('值1', '值2', ...) 
INSERT INTO "表格1" ("欄位1", "欄位2", ...) SELECT "欄位3", "欄位4", ... FROM "表格2";
```

## 查詢筆數重複的資料

依stud_no欄位查詢stud_no欄位資料重複的筆數

```sql
SELECT stud_no, COUNT(*) AS count
FROM student_data
GROUP BY stud_no
HAVING (COUNT(*) > 1)
```

## 查詢時顯示群組資料中最新一筆的資料(需要一個不重複的 Identity 欄位)

依Date欄位做判斷，顯示最新的紀錄

```sql
SELECT ID, Number, Price, Date 
FROM test AS T
WHERE Date IN (
		SELECT TOP 1 DATE
		FROM test
		WHERE ID = T.ID
		ORDER BY Date DESC
		)
```

## DB Link 連線至另一台資料庫做查詢的動作

參考文章：[SQL Server 使用 OpenQuery 以及傳遞參數](http://poychang.github.io/sql-server-open-query/)

先建立連結

```sql
exec sp_addlinkedserver 'DBName','','SQLOLEDB','127.0.0.1'
exec sp_addlinkedsrvlogin 'DBName','false',null,'sa','password'
go
```

以下範例，在資料表前，先指定哪一個SQL Server

```sql
INSERT INTO Area 
SELECT * FROM DBName.dbo.Area WHERE AreaID = 'US0002'
```

## 建立完DBlink後，可使用OPENQUERY的方式，對遠端資料庫做查詢

```sql
SELECT * FROM OPENQUERY(PROD, 'select sysdate from dual')
```

## 使用SQL指令取得資料表內的欄位名稱 

```sql
SELECT NAME
FROM SYSCOLUMNS
WHERE ID= Object_ID('[TableName]')
```

## INFORMATION_SCHEMA 是訊息資料庫，其中保存著關於資料庫伺服器所維護的所有其他資料庫的訊息

透過下列SQL，可找出有具有特定關鍵字的預存程序或函數

```sql
{'fraction_non_alphanumeric': 0.16169154228855723, 'fraction_numerical': 0.028784648187633263, 'mean_word_length': 4.744897959183674, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2615137', 'n_tokens_mistral': 1656, 'n_tokens_neox': 1650, 'n_words': 290}