Sqlserver,Mysql基礎SQL語句 SqlServer 建表 CREATE TABLE [IF NOT EXISTS] 表名 ( 欄位名 列類型 [屬性] , 欄位名 列類型 [屬性] , ....... 欄位名 列類型 [屬性] ) ; CREATE TABLE visits ( vis ...
Sqlserver,Mysql基礎SQL語句
SqlServer
建表
CREATE TABLE [IF NOT EXISTS] 表名 (
欄位名 列類型 [屬性] ,
欄位名 列類型 [屬性] ,
.......
欄位名 列類型 [屬性]
) ;
CREATE TABLE visits (
visit_id INT PRIMARY KEY IDENTITY (1, 1),--主鍵列,從1開始自增
first_name VARCHAR (50) NOT NULL,--不允許為空,最多可存儲50個字元
last_name VARCHAR (50) NOT NULL,
visited_at DATETIME,--允許為空
phone VARCHAR(20),
store_id INT NOT NULL,
);
修改欄位預設值
##已存在預設值
exec sp_helpconstraint @objname=表名 --(查看指定表相關約束詳情)
alter table 表名 drop constraint 約束名 --(刪除預設值)
alter table 表名 add default 預設值 for --欄位名
##無預設值
alter table 表名 add default 預設值 for 欄位名
修改表名
sp_rename tablename,newtablename
修改欄位名
sp_rename 'tablename.colname',newcolname,'column'
添加欄位
alter table table_name add new_column data_type [interality_codition]
例子
##添加nvarchar類型的列,預設值為null
alter table student add studentName nvarchar(250) default null
##添加int類型的列,預設值為0,主鍵
alter table student add studentId int primary key default 0
##判斷student中是否存在name欄位且刪除欄位
if exists(select * from syscolumns where id=object_id('student') and name='name')
begin
alter table student DROP COLUMN name
end
更改欄位
##格式:alter table table_name alter column column_name data_type
ALTER TABLE student ALTER COLUMN name VARCHAR(200)
刪除欄位
##欄位存在相關約束
exec sp_helpconstraint @objname=表名 --(查看指定表相關約束詳情)
alter table 表名 drop constraint 約束名 --(刪除相關約束)
alter table 表名 drop cloumn 欄位名 --(刪除欄位)
##無相關約束
alter table 表名 drop cloumn 欄位名
添加表註釋
COMMENT ON table 表 IS '表註釋';
添加欄位註釋
COMMENT on column 表.欄位 is '欄位註釋';
數據排序
方法一 ROW_NUMBER() OVER()
--pageIndex 表示指定頁
--pageSize 表示每頁顯示的條數
SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY 排序欄位) AS RowId,* FROM 表名 ) AS r
WHERE RowId BETWEEN ((pageIndex-1)*pageSize + 1) AND (pageIndex * PageSize)
方式二 offset fetch next
註意:這是比較推薦的寫法,EF生成的sql語句也是這樣的,但是必須記住rows和末尾的only 不要寫漏掉了,並且這種方式必須要接著Order by XX 使用,不然會報錯。如果沒有排序的欄位可以使用(select 1);
--pageIndex 表示指定頁
--pageSize 表示每頁顯示的條數
--排序欄位 可以用(select 1)代替
SELECT * FROM 表名 ORDER BY 排序欄位 offset ((pageIndex - 1) * pageSize) ROWS FETCH NEXT pageSize ROWS ONLY
方式三 top not in
--pageIndex 表示指定頁
--pageSize 表示每頁顯示的條數
SELECT TOP pageSize menuId, *
FROM sys_menu
WHERE menuId NOT IN (SELECT TOP ((pageSize-1)*pageIndex) menuId FROM sys_menu)
方式四 通過以欄位排序的方式top條數進行分頁
--pageIndex 表示指定頁
--pageSize 表示每頁顯示的條數
SELECT * FROM(
SELECT TOP pageSize * FROM(
SELECT TOP ((pageIndex - 1) * pageSize +(pageSize*2)) * FROM sys_menu ORDER BY menuId ASC)
AS TEMP1 ORDER BY menuId DESC)
AS TEMP2 ORDER BY menuId ASC
mysql
建表
CREATE TABLE [IF NOT EXISTS] 表名
(
欄位名
列類型 [屬性] [索引] [註釋],
欄位名
列類型 [屬性] [索引] [註釋],
.......
欄位名
列類型 [屬性] [索引] [註釋]
) [表類型] [字元集設置] [註釋]
註意:[IF NOT EXISTS]建議添加,添加了後如果表名存在會提示警告信息,而不是報錯。
CREATE TABLE IF NOT EXIST 'student'(
id INT(4) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '學號', --comment註釋,default預設
name VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
pwd VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',
sex VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性別',
birthday DATETIME DEFAULT NULL COMMENT '出生日期',
address VARCHAR (100) DEFAULT NULL COMMENT '家庭地址',
email VARCHAR(50) DEFAULT NULL COMMENT '電子郵箱'
) COMMENT '學生表'
修改表名
ALTER TABLE teacher RENAME AS allteacher
刪除表
DROP TABLE if EXISTS teacher1 --刪除表,如果表存在。
添加表欄位
ALTER TABLE allteacher ADD age INT(11)
修改欄位類型
##語法:ALTER TABLE 表名 MODIFY [COLUMN] 欄位名 新數據類型 新類型長度 新預設值 新註釋;-- COLUMN關鍵字可以省略不寫
alter table table1 modify column column1 decimal(10,1) DEFAULT NULL COMMENT '註釋';
alter table table1 modify column1 decimal(10,2) DEFAULT NULL COMMENT '註釋';
修改欄位名
##語法: ALTER TABLE 表名 CHANGE [column] 舊欄位名 新欄位名 新數據類型;
-- 正常,此時欄位名稱沒有改變,能修改欄位類型、類型長度、預設值、註釋
Alter table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '註釋';
-- 正常,能修改欄位名、欄位類型、類型長度、預設值、註釋
alter table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '註釋'
刪除表欄位
ALTER TABLE teacher1 DROP age1
修改表註釋
ALTER TABLE 表名 COMMENT '新註釋'
對數據的常用命令
##查詢數據
select distinct 列…. From 表名;--去重
select concat(列1,列2) from 表名;--拼接結果
select * from 表名 where 條件 order by 列 [asc/desc] --結果排序 升序:asc 降序:desc
##插入數據
insert into 表名(欄位1,欄位2) values(值1,值2),(值1,值2); --插入多條數據【MYSQL】
insert into 表名(欄位) select 欄位 from 表2; --查詢結果插入
insert into 表名 select 欄位 from 表2; --查詢結果,全表插入
數據排序
limit
--m 去掉的條數
--n 返回條數
select * from table order by id limit m, n;
Sqlserver和MySql的區別
Sqlserver | Mysql | |
---|---|---|
埠 | 1433 | 3306 |
自動增長 | identity(1,1) | auto increment |
字元串拼接 | + | concat() |
空值數量函數 | isnull() | ifnull() |
自增長列的插入 | 可以不為自動增長列插入值 | 需要為自動增長列插入值 |
日期格式化 | convert(varchar(8),getdate(),112) | data_format(xcs_received_date,'%Y%m%d') |