SQL基础-操纵表及插入、查询
一、操纵表
1、表的关键信息

2、更新表名
更新表名:使用RENAME TABLE关键字。语法如下:
RENAME TABLE 旧表名 TO 新表名; 比如,生产环境投产前备份teacher表,使用如下语句:
RENAME TABLE teacher TO teacher_bak;
3、更新字段名
更新字段名:使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名; 比如,修改teacher_name的字段名为teacher_nm,使用如下语句:
ALTER TABLE teacher RENAME COLUMN teacher_name TO teacher_nm;
4、更新字段类型
更新字段类型:使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 ALTER COLUMN 字段名 新字段类型; 比如,修改teacher_name的类型为VARCHAR(100),使用如下语句:
ALTER TABLE teacher ALTER COLUMN teacher_name varchar(100); 在更改类型的时候,更改前的类型和更改后的类型一定要能显示转换,否则会造成数据丢失。
5、更新字段NULL值
更新字段类型时,可同时设置字段NULL值、默认值,也是使用ALTER TABLE关键字,语法是一样的。 比如,修改teacher_name的类型为VARCHAR(100) NULL,使用如下语句:
ALTER TABLE teacher ALTER COLUMN teacher_name varchar(100) null DEFAULT ‘’;
6、更新字段默认值
更新字段类型时,也可同时设置字段默认值,语法是一样的。 比如,修改teacher_name的类型为VARCHAR(100) ,默认值为’’,使用如下语句:
ALTER TABLE teacher ALTER COLUMN teacher_name varchar(100) default ‘’; 更新字段默认值:也可使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值; 比如,修改teacher_name的默认值为’未知’,使用如下语句:
ALTER TABLE teacher ALTER COLUMN teacher_name set default ‘未知’; 删除字段默认值:使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT; 比如,删除teacher_name的默认值,使用如下语句:
ALTER TABLE teacher ALTER COLUMN teacher_name drop default;
7、更新主键字段
设置主键:如果表已存在,但没有定义主键字段,可使用ALTER TABLE关键字设置主键。语法如下:
ALTER TABLE 表名 ADD PRIMARY KEY (主键字段列表); 比如,将teacher表的teacher_name和gender两个字段设置为主键,使用如下语句:
ALTER TABLE teacher ADD PRIMARY KEY (teacher_name,gender); 删除主键字段:如果表中已定义主键字段,可使用ALTER TABLE关键字删除主键。语法如下:
ALTER TABLE 表名 DROP PRIMARY KEY; 比如,将teacher表的主键删除,使用如下语句:
ALTER TABLE teacher DROP PRIMARY KEY; 更新主键字段:如果表中已定义主键字段,但想修改主键字段,比如说假如现在teache表的主键字段是teacher_name和gender,
现在想修改主键字段为teacher_id,也是可以的。
8、新增、删除字段
新增字段:使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 ADD COLUMN 新字段名 字段类型及其他属性; 比如,在teache表中新增年龄字段age,使用如下语句:
ALTER TABLE teacher ADD COLUMN age int not null default 0; 删除字段:使用ALTER TABLE关键字。语法如下:
ALTER TABLE 表名 DROP COLUMN 字段名; 比如,在teache表中删除年龄字段age,使用如下语句:
ALTER TABLE teacher DROP COLUMN age;
9、删除表
删除表:使用DROP TABLE关键字。语法如下:
DROP TABLE 表名; 比如,删除teacher表,使用如下语句:
DROP TABLE teacher;
二、插入数据
1、建表
CREATE TABLE teacher (
teacher_id VARCHAR(50) NOT NULL,
teacher_name VARCHAR(100) NOT NULL DEFAULT '未知',
gender VARCHAR(10),
PRIMARY KEY ( teacher_id)
);
2、插入整行字段
插入整行字段:关键字INSERT INTO
INSERT INTO 表名 VALUES (?,?,?,?); 假如需要向teacher表中插入两条数据:
#值的顺序与表中的字段顺序必须一致!不太安全;
INSERT INTO teacher VALUES ('T0001','高齐妍','男');
INSERT INTO teacher VALUES ('T0002','李红','女'); #安全
INSERT INTO teacher(teacher_id,teacher_name,gender) VALUES ('T0001','高齐妍','男');
3、插入部分字段
INSERT INTO teacher(teacher_id,teacher_name,gender) VALUES ('T0003', '李一萱',NULL);
#这种要求性别字段可为NULL
INSERT INTO teacher(teacher_id,teacher_name) VALUES ('T0003', '李一萱');
#这要求teacher_name字段设置了默认值
INSERT INTO teacher(teacher_id) VALUES ('T0004');
4、一次插入多行
INSERT INTO teacher VALUES ('T0001','高齐妍','男'),('T0002','李红','女');
注意:
建议一条SQL语句插入的条数在1000条以下;
还受限于数据库支持的单条SQL语句的长度;
5、借助其他表数据插入
INSERT INTO teacher SELECT * FROM teacher; 克隆表:
SELECT * INTO teacher_bak FROM teacher; CREATE TABLE teacher_bak AS SELECT * FROM teacher;
三、查询
1、建表
##建表
CREATE TABLE `student` (
`student_id` varchar(50) NOT NULL COMMENT '学生编号',
`student_name` varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
`gender` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
`birth_day` date NOT NULL COMMENT '生日',
`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
`class_id` varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
`score` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
`teacher_id` varchar(20) DEFAULT NULL COMMENT '老师编号'
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='学生'; ##插入部分数据
INSERT INTO `student` VALUES ('S20180001','方东美','女','2006-02-04',12,'G0101',80.65,'T0003'),
('S20180002','方香','女','2008-09-28',10,'G0101',75.48,NULL),
('S20180003','高紫菡','男','2006-07-22',12,'G0101',74.46,'T0003'),
('S20180004','胡未迟','男','2007-07-25',11,'G0101',51.27,'T0003'),
('S20180005','李咏颐','男','2007-03-16',11,'G0101',88.84,'T0003'),
('S20180006','吴灏潇','男','2008-04-19',10,'G0101',69.93,NULL),
('S20180007','吴明鸿','男','2007-11-18',11,'G0101',63.65,'T0003'),
('S20180008','吴鹏宇','男','2007-08-24',11,'G0101',84.69,'T0003'),
('S20180009','吴少雄','男','2007-08-04',11,'G0101',76.36,'T0003'),
('S20180010','习芬飘','女','2005-01-27',13,'G0101',83.42,'T0003'),
('S20180011','俞倚琳','女','2007-07-07',11,'G0101',97.38,'T0003'),
('S20180012','张琼雪','女','2006-06-12',12,'G0101',81.01,'T0003');
2、查询部分列
SELECT 字段列表 FROM 表名; SELECT student_id,student_name,gender FROM student;
3、查询所有列
第一种写法(推荐),字段顺序可以变换:
SELECT teacher_id,teacher_name,gender,age,class_id FROM student; 第二种写法:
SELECT * FROM student;
4、排序返回结果
将查询结果排序后展示:关键字ORDER BY … [ASC/DESC]
SELECT 字段列表 FROM 表名
ORDER BY 字段1 [ASC/DESC],字段2 [ASC/DESC]…; SELECT student_id,student_name,age FROM student ORDER BY age ASC;
| | (等价)
SELECT student_id,student_name,age FROM student ORDER BY age; ##可以指定多个字段排序
SELECT student_id,student_name,age FROM student ORDER BY age ASC,student_name ASC; ##按列位置排序
SELECT student_id,student_name,age FROM student ORDER BY age ASC,student_name ASC;
| | (等价)
SELECT student_id,student_name,age FROM student ORDER BY 3 ASC,2 ASC;
5、限制返回结果
###
返回前几行:
关键字TOP、LIMIT
mysql没有TOP 两种写法:
SELECT TOP 10 字段列表 FROM 表名;
SELECT 字段列表 FROM 表名 LIMIT 10; 一般在两种情况下会使用:
表数据太多,想随便查看一下表中的数据;
一般与ORDER BY关键字配合使用,返回按某些字段排序后的前几行; ###
返回中间几行:
关键字LIMIT M OFFSET N(从第N行开始,返回M行记录) 两种写法:
SELECT 字段列表 FROM 表名 LIMIT M OFFSET N;
SELECT 字段列表 FROM 表名 LIMIT N,M; 这里的第N行,是从0开始算起的;
一般与ORDER BY关键字配合使用,按M行为一页,返回某一个分页的记录; ###
返回中间几行:
关键字LIMIT M OFFSET N(从第N行开始,返回M行记录) SELECT 字段列表 FROM 表名 LIMIT 0,10;
| | (等价)
SELECT 字段列表 FROM 表名 LIMIT 10; ###
返回后几行:
关键字TOP、LIMIT、ORDER BY SQL语句中,没有返回后几行的专用写法,一般转换为按返回前几行的相
反方式排序后,再返回前几行。使用这种方式变相的返回后几行。 第1步:先按学生编号倒序排序;
第2步:返回排序后的前5行;
第3步:将前5行数据升序排序; SELECT * FROM
(
SELECT TOP 5 *
FROM student
ORDER BY student_id DESC
)a
ORDER BY student_id ASC
SQL基础-操纵表及插入、查询的更多相关文章
- SQL语句 在一个表中插入新字段
SQL语句 在一个表中插入新字段: alter table 表名 add 字段名 字段类型 例: alter table OpenCourses add Audio varchar(50)alter ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- sql 所有数据表中 插入字段
declare @tablename varchar(200)declare @sql varchar(2000)declare cur_t cursor forselect name from sy ...
- SQL基础-连接表
一.连接表 1.SQL JOIN 忘记在哪保存的某位网友的图,先明白SQL JOIN, 2.关于笛卡尔积 笛卡尔积: 两个集合的乘积 重新建student表和teacher表: student表: C ...
- SQL 多个表之间联合查询
非常少用join,这次学学,并备忘两篇文章! 转自:http://hcx-2008.javaeye.com/blog/285661 连接查询 通过连接运算符能够实现多个表查询.连接是关系数据库模型的主 ...
- Sql Server根据表名生成查询的存储过程(查询条件可选)
static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec Get ...
- SQL基础-建表
一.建表 1.创建表的两种方式 *客户端工具 *SQL语句 2.使用SQL语句创建表 表名和字段名不能使用中文:(一般为字母开头,字母.数字.下划线组成的字符串): CREATE TABLE关键字后跟 ...
- sql把一个表数据插入到另一张表
把一个表数据插入到另一张表 insert into tableB (field1,field2,field3,field4) select field1,field2,field3,'val4' fr ...
- 6-02使用SQL语句向表中插入数据
插入语句的语法: INSERT INTO 表() VALUES(值列表) 注意事项: 1:每次插入一行数据,不能只插入半行或几列数据. 2:每一个数据值的数据类型.精度和小数位数必须与相应的列匹配. ...
随机推荐
- Hyper-V虚拟机配置内部网络固定IP 并且连接外网
2019/10/23 Hyper-V CentOS7 摘要:Hyper-V中的虚拟机CentOS7能固定IP并且连接外网 保证宿主机的Xshell始终只用同一个IP连接到该虚拟机 新建内部网络虚拟交换 ...
- windows上git clone命令速度过慢问题的解决
在windows上用git clone 命令克隆一个仓库,速度非常的慢,但是浏览器访问github的速度确挺正常的,我也用了翻墙软件(SSR). git设置一下全局代理可以解决这个问题: git co ...
- 使用sudo进行Linux权限升级技巧
0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...
- XML整形以及改行字符串输出
XML整形 估计如下一样使用XDocument的人比较多,毕竟也是微软推荐使用的. string FormatXml(string Xml) { try { XDocument doc = XDocu ...
- CentOS 使用163yum源
下载163源 # wget http://mirrors.163.com/.help/CentOS7-Base-163.repo 如果报以下错误 -bash: wget: command not fo ...
- Java开发环境之Solr
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 玖章:Solr安装教程 1)官网下载Solr安装包 http://lucene.apache.org/solr/downl ...
- Java Excel报表导出Demo
/** * 一级权限数据导出 * @return */ @RequestMapping(value = "/getExportData", method = RequestMeth ...
- Github 上 36 个最实用的 Vue 开源库
任何一个开发者,都是十分喜欢使用开源软件包的.因为它使开发工作变得更快速.高效.容易.如果没有开源软件包,开发工作将变得疲惫不堪,不断的重复造轮子! 下面整理了 Github 上 36 个实用的 Vu ...
- Python,for循环小例子--99乘法表
一.99乘法表 for i in range(1, 10): for j in range(1, i + 1): print('%sx%s=%s ' % (j, i, j * i), end='') ...
- beta版本——第七次冲刺
第七次冲刺 (1)SCRUM部分☁️ 成员描述: 姓名 李星晨 完成了哪个任务 编写个人信息修改界面的js 花了多少时间 3h 还剩余多少时间 0h 遇到什么困难 密码验证部分出现问题 这两天解决的进 ...