SQL常用基础语句(SQL常用增删改查语句及案例)
一、添加数据
- 语法:
* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
- 注意:
(1) 列名和值要一一对应。
(2) 如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...值n);
(3) 除了数字类型,其他类型需要使用引号(单双都可以)引起来
二、删除数据
- 语法:
* delete from 表名 [where 条件]- 注意:
(1) 如果不加条件,则删除表中所有记录。
(2) 如果要删除所有记录- 使用推荐:
(1)delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
(2)TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
三、修改数据
- update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
- 注意:
如果不加任何条件,则会将表中所有记录全部修改。
四、查询数据
1) 多个字段的查询:
- 语法
select 字段名1,字段名2... from 表名;- 注意:
如果查询所有字段,则可以使用*来替代字段列表。- 去除重复:distinct
- 计算列
(1) 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
(2) ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
(3) 表达式1:哪个字段需要判断是否为null
(4) 如果该字段为null后的替换值。- 起别名:as:as也可以省略
2)条件查询:
- where子句后跟条件
- 运算符:
(1) != 、 > 、< 、<= 、>= 、= 、<>
(2) BETWEEN...AND
(3) IN( 集合)
(4) LIKE:模糊查询
(5) 占位符:
(6) _:单个任意字符
(7) %:多个任意字符
(8) IS NULL :为空集
(9) and 或 &&:并且
(10) or 或 || :或
(11) not 或 !:非
3)查询语句:
- 排序查询
(1) 语法:order by 子句
(2) order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
(3) 排序方式: ASC:升序,默认的; DESC:降序。
- 注意: 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
- 聚合函数:将一列数据作为一个整体,进行纵向的计算。
(1)count:计算个数
* 一般选择非空的列:主键
* count(*)
(2) max:计算最大值
(3) min:计算最小值
(4) sum:计算和
(5) avg:计算平均值
- 注意:聚合函数的计算,排除null值。
解决方案:
(1) 选择不包含非空的列进行计算
(2) IFNULL函数
4)分组查询:
- 语法:group by 分组字段;
- 注意:
(1) 分组之后查询的字段:分组字段、聚合函数
(2) where 和 having 的区别?
* where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having可以进行聚合函数的判断。
5)分页查询:
- 语法:limit 开始的索引,每页查询的条数;
- 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数-- 每页显示3条记录
五、常用基础语句应用
1、说明:创建数据库
CREATE DATABASE database-name2、说明:删除数据库
drop database dbname3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack4、说明:创建新表
create table tabname
(col1 type1 [not null] [primary key],
col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only5、说明:删除新表
drop table tabname6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。7、说明:添加主键:
Alter table tabname add primary key(col)
说明:删除主键:Alter table tabname drop primary key(col)8、说明:创建索引:
create [unique] index idxname on tabname(col….)
删除索引:
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。9、说明:创建视图:
create view viewname as select statement
删除视图:
drop view viewname10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count(*) as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符(并)UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结 果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符(差)EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符(交)INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
创建、插入数据
create database mydatabase;
# 指定使用哪个数据库
use mydatabase;
# 创建表
CREATE TABLE STUDENTS(
SNO NUMERIC (6, 0) NOT NULL,
NAME CHAR (8) NOT NULL,
AGE NUMERIC(3,0),#第一个数据为有效数据位数;第二个数据为保留的小数位
SEX CHAR(2),
BPLACE CHAR(20),
PRIMARY KEY(SNO));#设定主关键字,是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。
CREATE TABLE COURSES
(CNO CHAR(4) NOT NULL,CNAME char(10) NOT NULL,CREDIT INT,PRIMARY KEY(CNO));CREATE TABLE ENROLLS
( SNO NUMERIC(6,0) NOT NULL,CNO CHAR(4) NOT NULL,GRADE INT,PRIMARY KEY(SNO,CNO),#外关键字 是用于建立或加强两个表数据之间的链接的一列或多列。#参考学生表中的学号SNOFOREIGN KEY(SNO) REFERENCES STUDENTS(SNO),FOREIGN KEY(CNO) REFERENCES COURSES(CNO),CHECK ((GRADE IS NULL) AND (GRADE BETWEEN 0 AND 100)));CREATE TABLE TEACHERS
(TNO NUMERIC(4) NOT NULL,TNAME char(8),AGE NUMERIC(3,0),PS char(8),PRIMARY KEY(TNO));
CREATE TABLE TEACHING
( CNO CHAR(4) NOT NULL,CLASS CHAR(8) ,TNO NUMERIC(4) ,SUM NUMERIC(3,0),PRIMARY KEY(CNO));# 向表中添加数据
alter table TEACHING change column SUM SNUM varchar(8);
alter table STUDENTS change column NAME SNAME varchar(8);#--修改表列名
INSERT INTO STUDENTS(SNO, SNAME,AGE,SEX,BPLACE) VALUES
(990027,'胡伟',22,'男','湖北'),
(990652,'张春明',24,'男','河北'),
(990668,'王玉',22,'女','四川'),
(990674,'丁晓春',24,'男','黑龙江'),
(990676,'贺正生',23,'男','湖南'),
(990684,'刘文革',24,'女','辽宁'),
(991091,'程会军',23,'男','山西');
INSERT INTO COURSES(CNO, CNAME,CREDIT) VALUES
('C1','数据库',3),
('C2','数据结构',3),
('C3','操作系统',4),
('C4','软件工程',3);
INSERT INTO ENROLLS(SNO,CNO,GRADE) VALUES
(990027,'C1',90),
(990027,'C3',95),
(990027,'C4',88),
(990652,'C1',88),
(990652,'C4',83),
(990668,'C3',84),
(990674,'C2',77),
(990676,'C3',90),
(990684,'C3',85),
(990684,'C1',82),
(991091,'C2',93);
INSERT INTO TEACHERS(TNO,TNAME,AGE,PS) VALUES
(1420,'周振华',38,'副教授'),
(1481,'刘建平',30,'讲师'),
(1433,'王志伟',28,'讲师');
alter table TEACHING drop primary key;
INSERT INTO TEACHING(CNO,CLASS,TNO,SNUM) VALUES
('C1','E851',1420,30),
('C2','E851',1420,22),
('C3','E651',1481,30),
('C3','E852',1481,28),
('C4','E851',1433,24),
('C1','E852',1420,28);
删除表,增加列
#根据表的 STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。
CREATE TABLE GIRLAS SELECT SNO, SNAME, AGEFROM STUDENTSWHERE SEX=' 女 ';
#删除教师表 TEACHER,
DROP TABLE TEACHERS;
#在教师表中增加住址列。
ALTER TABLE STUDENTS ADD (ADDR CHAR(50));
视图操作
#建立一个只包括教师号、姓名和年龄的视图 FACULTY ,( 在视图定义中不能包含 ORDER BY 子句 )
CREATE VIEW FACULTY AS SELECT
TNO, TNAME, AGE FROM TEACHERS;#从学生表、课程表和选课表中产生一个视图 GRADE_TABLE ,它包括学生姓名、课程名和成绩。
CREATE VIEW GRADE_TABLE
AS SELECT SNAME,CNAME,GRADE
FROM STUDENTS,COURSES,ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND
COURSES.CNO=ENROLLS.CNO;#删除视图 GRADE_TABLE
DROP VIEW GRADE_TABLE RESTRICT;
索引
#在学生表中按学号建立索引。
CREATE UNIQUE INDEX ST ON STUDENTS (SNO);
#删除按学号所建立的索引
DROP INDEX ST ON STUDENTS;
单表操作
#把所有学生的年龄增加一岁
UPDATE STUDENTS SET AGE = AGE+1
# 找出 3 个学分的课程号和课程名。SELECT CNO, CNAMEFROM COURSESWHERE CREDIT = 3
#查询年龄大于 22 岁的学生情况。SELECT *FROM STUDENTSWHERE AGE > 22
#找出籍贯为河北的男生的姓名和年龄。SELECT SNAME, AGEFROM STUDENTSWHERE BPLACE = ' 河北 ' AND SEX = ' 男 '
#找出年龄在 20 ~ 23 岁之间的学生的学号、姓名和年龄,并按年龄升序排序。 (ASC (升序)或 DESC (降序)声明排序的方式,缺省为升序。 )SELECT SNO, SNAME, AGEFROM STUDENTSWHERE AGE BETWEEN 20 AND 23ORDER BY AGE
- 条件比较运算符=、<和逻辑运算符 AND (与),此外还可以使用的运算符有:>、>=、<=、<>、 NOT (非)、 OR (或)等。谓词 LIKE 只能与字符串联用,常常是 “ <列名> LIKE pattern” 的格式。特殊字符 “_” 和 “%” 作为通配符。
- 谓词 IN 表示指定的属性应与后面的集合(括号中的值集或某个查询子句的结果)中的某个值相匹配,实际上是一系列的 OR (或)的缩写。谓词 NOT IN 表示指定的属性不与后面的集合中的某个值相匹配。
#找出年龄小于 23 岁、籍贯是湖南或湖北的学生的姓名和性别。
SELECT SNAME, SEXFROM STUDENTSWHERE AGE < 23 AND BPLACE LIKE' 湖% '#或
SELECT SNAME, SEXFROM STUDENTSWHERE AGE < 23 AND BPLACE IN ( ' 湖南 ' , ' 湖北 ' )#找出学生表中籍贯是空值的学生的姓名和性别。(在 SQL 中不能使用条件:<列名>= NULL 。在 SQL 中只有一个特殊的查询条件允许查询 NULL 值:)
SELECT SNAME, SEXFROM STUDENTSWHERE BPLACE IS NULL
多表操作
#找出成绩为 95 分的学生的姓名。(子查询)SELECT SNAMEFROM STUDENTSWHERE SNO =(SELECT SNOFROM ENROLLSWHERE GRADE = 95)
#找出成绩在 90 分以上的学生的姓名。
SELECT SNAMEFROM STUDENTSWHERE SNO IN(SELECT SNOFROM ENROLLSWHERE GRADE > 90)
#查询全部学生的学生名和所学课程号及成绩。(连接查询)SELECT SNAME, CNO, GRADEFROM STUDENTS, ENROLLSWHERE STUDENTS.SNO = ENROLLS.SNO
当构造多表连接查询命令时,必须遵循两条规则。
- 第一,连接条件数正好比表数少 1 (若有三个表,就有两个连接条件 ) ;
- 第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件(也有少数例外情况)
#找出籍贯为山西或河北,成绩为 90 分以上的学生的姓名、籍贯和成绩。
SELECT SNAME, BPLACE, GRADEFROM STUDENTS, ENROLLSWHERE BPLACE IN (‘ 山西 ’ , ‘ 河北 ’) AND GRADE > = 90 AND STUDENTS.SNO=ENROLLS.SNO#查出课程成绩在 80 分以上的女学生的姓名、课程名和成绩。( FROM 子句中的子查询)
SELECT SNAME,CNAME, GRADEFROM (SELECT SNAME, CNAME , GRADEFROM STUDENTS, ENROLLS,COURSESWHERE SEX = ' 女 ')AS TEMP (SNAME, CNAME,GRADE)WHERE GRADE > 80
表达式与函数的使用
内部函数:
SQL 标准中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函数,称之为聚集函数( Set Function )。
COUNT 函数的结果是该列统计值的总数目,
SUM 函数求该列统计值之和,
AVG 函数求该列统计值之平均值,
MAX 函数求该列最大值,
MIN 函数求该列最小值。
GROUP BY 与 HAVING :
GROUP BY 子句把一个表按某一指定列(或一些列)上的值相等的原则分组,然后再对每组数据进行规定的操作 GROUP BY 子句总是跟在 WHERE 子句后面,当 WHERE 子句缺省时,它跟在 FROM 子句后面。HAVING 子句常用于在计算出聚集之后对行的查询进行控制。
#查询各课程的学时数。(算术表达式由算术运算符+、-、 * 、/与列名或数值常量所组成。)SELECT CNAME,COURSE_TIME = CREDIT*16FROM COURSES#找出教师的最小年龄- --28。
SELECT MIN(AGE)FROM TEACHERS#统计年龄小于等于 22 岁的学生人数。(统计)
SELECT COUNT(*)FROM STUDENTSWHERE AGE < = 22# 找出学生的平均成绩和所学课程门数。
SELECT SNO, AVG(GRADE), COURSES = COUNT(*)FROM ENROLLSGROUP BY SNO#找出年龄超过平均年龄的学生姓名。
SELECT SNAME
FROM STUDENTS
WHERE AGE >(SELECT AVG(AGE)FROM STUDENTS)#找出各课程的平均成绩,按课程号分组,且只选择学生超过 3 人的课程的成绩。SELECT CNO, AVG(GRADE), STUDENTS = COUNT(*)FROM ENROLLSGROUP BY CNOHAVING COUNT(*) >= 3
相关子查询
当一个子查询涉及到一个来自外部查询的列时,称为相关子查询( Correlated Subquery) 。相关子查询要用到存在测试谓词 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。
# 查询没有选任何课程的学生的学号和姓名。
SELECT SNO, SNAMEFROM STUDENTSWHERE NOT EXISTS(SELECT *FROM ENROLLSWHERE ENROLLS.SNO=STUDENTS.SNO)
内、外连接
内连接:等值连接,不等连接
select * from A,B where A.d = B.d
select * from A inner join B on A.d <>B.d
外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。
我们就简单的叫:左连接、右连接和全连接。
外连接的作用是在做连接操作时避免丢失信息。
左连接:(显示左表全部行,右边无的用NULL代替)
概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
右连接:(显示右表全部行,左边无的用NULL代替)
概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
全连接:(返回左表和右表中的所有行)
概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值
#列出全部教师的姓名及其任课的课程号、班级。
#左连接
SELECT TNAME, CNO, CLASSFROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO);
#右连接
SELECT TNAME, CNO, CLASSFROM TEACHERS RIGHT OUTER JOIN TEACHING USING (TNO);
SQL常用基础语句(SQL常用增删改查语句及案例)相关推荐
- mysql增数据语句_Mysql 数据增删改查语句
插入数据 insert #1. 插入完整数据(顺序插入)#语法一: insert into 表名(字段1,字段2,字段3-字段n) values (值1,值2,值3-值n);#语法二: insert ...
- java+SQL做学生信息管理系统(增删改查)
java+SQL做学生信息管理系统(增删改查) [过程中需要用到的所有工具数据库以及数据库管理器等等] https://pan.baidu.com/s/1cLKJPKXauLCl-Vwah6wFIQ ...
- mysql数据库增删改查关键字_MySQL数据库(增删改查语句)
MySQL数据库(增删改查语句) 一.登录数据库:----> mysql -uroot -proot;(对应用户名和密码) 二.SQL语句: 数据定义语言DDL 用来定义数据库.表.列,关键 ...
- mysql删除表命令语句_MySQL增删改查语句命令(一)
增删改查语句 增删改查的语句命令为 增:insert 删:delete 改:update 查:SELECT或者show 库操作 创建数据库:create database shujukuba; 创建带 ...
- mysql8.0增删改查语句_MySQL增删改查语句
/数据表,显示表的结构) l 创建数据库 create database student l 删除数据库 drop database student l 创建数据表 create table admi ...
- SQLite数据库-增删改查语句
Android中自带的数据库----SQLite 这里使用Navicat工具来学习 1.创建新的SQLite连接 数据库文件名字和连接名一样就好 2.数据库的创建语句 //创建一个book表 crea ...
- java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...
- c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...
- mysql查询和修改一个命令_MYSQL的常用命令和增删改查语句
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...
- python对excel增删改查语句_利用python模拟sql语句对员工表格进行增删改查
本文主要给大家介绍了关于python模拟sql语句对员工表格进行增删改查的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 具体需求: 员工信息表程序,实现增删改查操作: 可进行模糊查询, ...
最新文章
- 华为p20可以用云闪付吗_华为hcIE有多难?零基础可以通过华为hcie认证吗?
- 微软研究院开源编程语言Verona,借鉴Rust、Cyclone等特性
- 本地编译Hadoop2.8.0源码总结和问题解决(转自:http://blog.csdn.net/young_kim1/article/details/50324345)
- Unable to Open User Login File
- Chrome跨域问题
- net 架构师-数据库-sql server-002-工具
- 这个机器人花盆,给你的植物长了脚脚
- python零基础学难吗_零基础学习Python难吗?要怎么学Python才是最有效的?
- Lucene.Net中 FSDirectory存储方式下一个 Document是如何得到的
- 【NA】高斯型积分公式(一)
- 编程珠玑 啊哈 算法
- php屏蔽中文浏览器,网站屏蔽中文浏览器/英文浏览器方法
- 微信H5开发-采坑记
- 超好用的mac虚拟机软件:VM虚拟机 mac中文版
- 3Dvr全景制作VR全景技术讲解-道可云
- python24点4张扑克_Python实现扑克24点 ,从此我就没输过。
- 笔记本手机都能用的充电器,做的只有乒乓球大小,AOHi 65W氮化镓充电器体验
- 抖音集锦(你不得不看的那些镜头)
- 【品高云7年】四、生产运行支撑到底对云有什么需求
- Python使用ffmpeg完美解决方案(避坑必看)
热门文章
- 【其他】快速注册stackoverflow
- RocketMQ - 6 生产者,顺序消息
- 哈工大计算机学院考研复试分数线2021,哈工大考研分数线2021什么时候出来?
- 【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO
- c语言程序中只能给指针赋,在c程序中,只能给指针变量赋NULL值和_____值. 答案:地址;指针...
- SMBIOS信息概述 – DMI
- 生成二维码合成海报并下载
- 计算机学院乔丽红,用巴特莱特窗函数法设计数字FIR带通滤波器dsp课程设计.doc...
- C语言将一字符串输入到数组(长度不超过80)后将其输出, 将其中的英文字母大小写互换后再将整个字符串输出。
- flash写保护原理_一文详解闪存flash读写的原理