① 如何使用一條sql語句,插入多條記錄
無可能 除非寫存儲過程 做一個循環 這個 你要想一下 你用的應該是關系型資料庫吧 那麼關系型資料庫就必須要求表裡面有主鍵約束以保證每條記錄不會重復 當然也有些表是沒主鍵的 這樣的設計我覺得不能納入討論范圍 然後"一個查詢語句插入多條記錄" 這個命題得出一個推論 就是你不能設變數 就算可以設變數 但是只有一條語句 變數還是不能賦不同的值 那麼得出你插入的多條數據都是重復的 這就違反了主鍵約束 也違反了第一範式的要求了。。。我覺得三大範式 你可以不用太苛刻的遵守 但是第一範式我認為是底線了 因為如果連第一範式都不遵守的話 那麼就已經顛覆了關系型資料庫的數學模型了。。。
其實這個問題我曾經也考慮過 因此看些書 結合平時的工作 最後就是按照上面這樣說服了自己。。。。
② sql如何將一條記錄查成多條
可以,有2中實現方案。
1。select*from(select欄位frombiaoaa),(selectcount(*)frombiaoab)
這個寫法有一個缺點,就是第二列的內容都一樣,也有很多行。
1。select*from(selectrownumar,欄位frombiaoa),(selectrownumbr,count1from(selectcount(*)count1frombiaob))wherea.ar=b.br(+)
構建一個行號欄位,用這個欄位進行關聯。並且保留前面表格的所有行。
③ MYSQL 語句如何拆分一個欄位為多條記錄
舉例:
原始SQL:
SELECTPROVINCE_CODE,CITY_CODE,ZONE_CODEFROMCIV_P_CUST
原始結果:
④ sql 一個欄位有多條數據 在一行顯示
方法一:直接構造(這種方法針對這樣的問題比較好,但實用性不大)
DECLARE@resultVARCHAR(1024)
SET@result=''
select@result+=b.f_measure+','fromt_quality_qi_specialt,t_quality_qi_measurebwheret.f_id=b.f_special_snandt.f_id=4andb.f_is_active=1
set@result=substring(@result,1,len(@result)-1)
SELECT@result
方法二:游標遍歷(這種方法可適用性比較強,但是看起來比較麻煩)
declare@resultvarchar(1024)='',@lsf_measurevarchar(1024)
declarecursor_testcursorforselectb.f_measure
fromt_quality_qi_specialt,t_quality_qi_measureb
wheret.f_id=b.f_special_snandt.f_id=4andb.f_is_active=1
opencursor_test
fetchnextfromcursor_testinto@lsf_measure
while@@fetch_status=0
begin
iflen(@result)>=1
set@result=@result+','+@lsf_measure
iflen(@result)<1
set@result=@lsf_measure
fetchnextfromcursor_testinto@lsf_measure
end
closecursor_test
deallocatecursor_test
select@result
⑤ SQL語句,取某條欄位有多個值的記錄
SELECT *
from T1 t WHERE EXISTS (SELECT 1 FROM T1 where id = t.id and name = t.name and age <> t.age)
⑥ 如何一次插入多條記錄的SQL語句
在使用SQL資料庫的時候,我們也許會需要一次像資料庫中添加多條記錄,那麼我們可以使用SQL語句來實現,該語句具體如下:
--添加一條記錄
INSERT INTO tableName(col1,col2,col3) VALUES (1,2,3)
--添加多條記錄
INSERT INTO tableName(col1,col2,col3)
SELECT 3,4,5
UNION ALL
SELECT 6,7,8
--從另外的一張表中讀取多條數據添加到新表中
INSERT INTO tableName(col1,col2,col3)
SELECT a,b,c FROM tableA
--從其他的多張表中讀取數據添加到新表中
INSERT INTO tableName(col1,col2,col3)
SELECT a,b,c FROM tableA WHERE a=1
UNION ALL
SELECT a,b,c FROM tableB WHERE a=2
上邊代碼中的into都可以省略!
上邊代碼中的union all如果換成union,則相同記錄只插入一次,不會重復插入。
另外一種方法是SQL Server2008特有的,所以,如果你不是SQL Server2008,就不能使用這種方法了。
INSERT INTO MyTable(ID,NAME)VALUES(7,'003'),(8,'004'),(9,'005')
create table [TEST]
(
[NUM_ID] int primary key
)
go
declare @temp int
set @temp=1;
while @temp<=1000000
begin
insert into [TEST]([NUM_ID]) values(@temp)
set @temp=@temp+1;
end
go
----------------------------------------------------------
--試試下面的方法
--2005
DECLARE @n AS BIGINT;
SET @n = 1000000;
WITH Base AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM Base WHERE n < CEILING(SQRT(@n))
),
Expand AS
(
SELECT 1 AS c
FROM Base AS B1, Base AS B2
),
Nums AS
(
SELECT ROW_NUMBER() OVER(ORDER BY c) AS n
FROM Expand
)
SELECT n FROM Nums WHERE n <= @n
OPTION(MAXRECURSION 0);
--2
CREATE FUNCTION dbo.fn_nums(@n AS BIGINT) RETURNS TABLE
AS
RETURN
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),
L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),
Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)
SELECT n FROM Nums WHERE n <= @n;
GO
--2000 這個會比前兩個慢,但是前兩個2000不能用
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END
INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
--------------------------------------------------------------------------------------------------------
⑦ java SQL 資料庫 一個欄位有多條不同的數據如何查找
可以用java.util.* 中的 List<Object>接收。循環顯示出來。
這里有jdbc的例子:http://www.cnblogs.com/bluedream2009/archive/2009/10/23/1588401.html
⑧ C# 執行一次SQL語句,搜索同一欄位的多條記錄
select * from table where id in (2,3,4) 純粹條件的事情。如果ID是int,可以
select * from table where id between 2 and 4
⑨ sql 如何將一條記錄查成多條
sqlserver寫法
創建測試表
createtablet
(col1varchar(10),
col2numeric(10,1),
col3varchar(10),
col4int)
insertintotvalues('山東',0.8,'全部',7)
執行
selectt.*fromt,
(selectnumberfrommaster..spt_valueswherenumberbetween1and(selectmax(col4)fromt)andtype='P')t2
結果
其他資料庫可能寫法不同