Sqlserver,Mysql基础SQL语句

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')
posted @ 2023-01-05 14:44  白日梦想家_zery  阅读(262)  评论(0编辑  收藏  举报