SQL语言常用范例(适配新手覆盖核心操作)_第1页
SQL语言常用范例(适配新手覆盖核心操作)_第2页
SQL语言常用范例(适配新手覆盖核心操作)_第3页
SQL语言常用范例(适配新手覆盖核心操作)_第4页
SQL语言常用范例(适配新手覆盖核心操作)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL语言常用范例(适配新手,覆盖核心操作)说明:以下范例基于2个常用测试表(student学生表、score成绩表),表结构如下,所有范例可直接复制修改字段/表名使用,适配MySQL、Oracle等主流数据库(差异处已标注)。一、基础表结构(范例依赖)1.student学生表字段:student_id(学生ID,主键)、student_name(学生姓名)、age(年龄)、gender(性别)、class(班级)、create_time(创建时间)2.score成绩表字段:score_id(成绩ID,主键)、student_id(关联学生ID,外键)、subject(科目)、score(分数)、exam_time(考试时间)二、核心SQL操作范例(一)DDL语句(数据定义语言,创建/修改/删除表)1.创建学生表(student)sql

--创建学生表,指定主键、字段类型和约束

CREATETABLEstudent(

student_idINTPRIMARYKEYAUTO_INCREMENT,--自增主键(MySQL),Oracle用SEQUENCE

student_nameVARCHAR(50)NOTNULL,--姓名非空

ageINTDEFAULT0,--年龄默认0

genderCHAR(2)CHECK(genderIN('男','女')),--性别只能是男/女

classVARCHAR(20),--班级

create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP--默认当前时间

);

--Oracle自增主键写法(替代AUTO_INCREMENT)

CREATESEQUENCEseq_student_idSTARTWITH1INCREMENTBY1;

CREATETABLEstudent(

student_idINTPRIMARYKEY,

student_nameVARCHAR(50)NOTNULL,

ageINTDEFAULT0,

genderCHAR(2)CHECK(genderIN('男','女')),

classVARCHAR(20),

create_timeDATEDEFAULTSYSDATE

);2.修改表结构(添加字段、修改字段)sql

--给student表添加“phone(电话)”字段

ALTERTABLEstudentADDphoneVARCHAR(11);

--修改phone字段长度为13,允许为空

ALTERTABLEstudentMODIFYphoneVARCHAR(13)NULL;

--删除phone字段

ALTERTABLEstudentDROPCOLUMNphone;3.删除表sql

--先删除外键关联的成绩表(避免约束报错),再删除学生表

DROPTABLEIFEXISTSscore;

DROPTABLEIFEXISTSstudent;(二)DML语句(数据操纵语言,增删改数据)1.插入数据(INSERT)sql

--1.插入单条数据(指定所有字段)

INSERTINTOstudent(student_id,student_name,age,gender,class,create_time)

VALUES(1,'张三',18,'男','高一(1)班','2026-01-0109:00:00');

--2.插入单条数据(省略主键,依赖自增)

INSERTINTOstudent(student_name,age,gender,class)

VALUES('李四',17,'女','高一(2)班');

--3.插入多条数据(高效批量插入)

INSERTINTOstudent(student_name,age,gender,class)

VALUES

('王五',18,'男','高一(1)班'),

('赵六',17,'女','高一(2)班'),

('孙七',18,'男','高一(3)班');2.修改数据(UPDATE)sql

--1.修改单个字段(将张三的年龄改为19)

UPDATEstudent

SETage=19

WHEREstudent_name='张三';

--2.修改多个字段(将李四的班级改为高一(1)班,电话添加

UPDATEstudent

SETclass='高一(1)班',phone=

WHEREstudent_id=2;

--3.批量修改(将所有高一(3)班的学生年龄加1,谨慎使用!)

UPDATEstudent

SETage=age+1

WHEREclass='高一(3)班';3.删除数据(DELETE)sql

--1.删除指定数据(删除student_id=5的学生)

DELETEFROMstudent

WHEREstudent_id=5;

--2.批量删除(删除年龄小于17的学生)

DELETEFROMstudent

WHEREage<17;

--3.清空表数据(保留表结构,自增主键重置,MySQL专用)

TRUNCATETABLEstudent;

--注意:TRUNCATE无法撤销,且会重置自增序列;DELETE可以用ROLLBACK撤销(事务中)(三)DQL语句(数据查询语言,核心查询)1.基础查询(SELECT)sql

--1.查询所有字段(*通配符,不推荐生产环境,效率低)

SELECT*FROMstudent;

--2.查询指定字段(查询学生姓名、年龄、班级)

SELECTstudent_name,age,classFROMstudent;

--3.别名查询(给字段/表起别名,简化语句)

SELECT

s.student_nameAS姓名,--字段别名(中文用AS,可省略)

s.ageAS年龄,

s.classAS班级

FROMstudents;--表别名(s代表student)

--4.去重查询(查询所有不重复的班级)

SELECTDISTINCTclassFROMstudent;2.条件查询(WHERE)sql

--1.等值条件(查询高一(1)班的学生)

SELECTstudent_name,ageFROMstudentWHEREclass='高一(1)班';

--2.范围条件(查询年龄在17-19之间的学生,含边界)

SELECT*FROMstudentWHEREageBETWEEN17AND19;

--等价写法

SELECT*FROMstudentWHEREage>=17ANDage<=19;

--3.模糊查询(查询姓名含“张”的学生,%匹配任意字符,_匹配单个字符)

SELECT*FROMstudentWHEREstudent_nameLIKE'张%';--张开头

SELECT*FROMstudentWHEREstudent_nameLIKE'%三';--三结尾

SELECT*FROMstudentWHEREstudent_nameLIKE'%李%';--含李字

--4.多条件查询(查询高一(2)班、女性学生)

SELECT*FROMstudentWHEREclass='高一(2)班'ANDgender='女';

--5.空值查询(查询电话为空的学生)

SELECT*FROMstudentWHEREphoneISNULL;

--查询电话不为空的学生

SELECT*FROMstudentWHEREphoneISNOTNULL;3.排序查询(ORDERBY)sql

--1.单字段排序(按年龄升序,ASC可省略,默认升序)

SELECT*FROMstudentORDERBYageASC;

--2.单字段排序(按年龄降序,DESC不可省略)

SELECT*FROMstudentORDERBYageDESC;

--3.多字段排序(先按班级升序,同班级按年龄降序)

SELECT*FROMstudentORDERBYclassASC,ageDESC;4.限制查询(分页,MySQL/Oracle差异)sql

--MySQL分页(LIMIT起始索引,每页条数;起始索引从0开始)

--例:查询第1页,每页3条数据

SELECT*FROMstudentORDERBYstudent_idLIMIT0,3;

--例:查询第2页,每页3条数据(起始索引=3)

SELECT*FROMstudentORDERBYstudent_idLIMIT3,3;

--Oracle分页(ROWNUM,需嵌套查询)

--例:查询前3条数据

SELECT*FROM(SELECTs.*,ROWNUMrnFROMstudents)WHERErn<=3;

--例:查询第4-6条数据

SELECT*FROM(SELECTs.*,ROWNUMrnFROMstudentsWHEREROWNUM<=6)WHERErn>3;5.聚合查询(GROUPBY+聚合函数)sql

--聚合函数:COUNT(计数)、SUM(求和)、AVG(平均)、MAX(最大)、MIN(最小)

--1.统计每个班级的学生人数

SELECTclassAS班级,COUNT(student_id)AS学生人数

FROMstudent

GROUPBYclass;

--2.统计每个班级的学生平均年龄

SELECTclassAS班级,AVG(age)AS平均年龄

FROMstudent

GROUPBYclass;

--3.统计每个科目的总分、最高分、最低分(关联score表)

SELECTsubjectAS科目,

SUM(score)AS总分,

MAX(score)AS最高分,

MIN(score)AS最低分

FROMscore

GROUPBYsubject;

--4.过滤聚合结果(HAVING,区别于WHERE:WHERE过滤行,HAVING过滤聚合后的组)

--例:查询学生人数大于2的班级

SELECTclassAS班级,COUNT(student_id)AS学生人数

FROMstudent

GROUPBYclass

HAVINGCOUNT(student_id)>2;6.多表关联查询(JOIN)sql

--1.内连接(INNERJOIN,只显示两表匹配的数据)

--例:查询学生姓名、班级、科目、分数(只显示有成绩的学生)

SELECT

s.student_nameAS姓名,

s.classAS班级,

sc.subjectAS科目,

sc.scoreAS分数

FROMstudents

INNERJOINscorescONs.student_id=sc.student_id;--关联条件:学生ID相等

--2.左连接(LEFTJOIN,显示左表所有数据,右表无匹配则显示NULL)

--例:查询所有学生的姓名和成绩,无成绩的学生显示NULL

SELECT

s.student_nameAS姓名,

sc.subjectAS科目,

sc.scoreAS分数

FROMstudents

LEFTJOINscorescONs.student_id=sc.student_id;

--3.右连接(RIGHTJOIN,显示右表所有数据,左表无匹配则显示NULL)

--例:查询所有成绩对应的学生信息,无对应学生(异常数据)显示NULL

SELECT

s.student_nameAS姓名,

sc.subjectAS科目,

sc.scoreAS分数

FROMstudents

RIGHTJOINscorescONs.student_id=sc.student_id;(四)其他常用范例1.子查询(嵌套查询)sql

--例1:查询成绩大于80分的学生姓名(子查询获取符合条件的学生ID)

SELECTstudent_nameFROMstudent

WHEREstudent_idIN(SELECTstudent_idFROMscoreWHEREscore>80);

--例2:查询比班级平均年龄大的学生

SELECTstudent_name,age,classFROMstudents

WHEREage>(SELECTAVG(age)FROMstudentWHEREclass=s.class);2.事务(ACID特性,确保数据一致性)sql

--MySQL事务(默认自动提交,需手动关闭)

STARTTRANSACTION;--开启事务

--操作1:修改张三的年龄

UPDATEstudentSETage=20WHEREstudent_name='张三';

--操作2:给张三添加一条数学成绩

INSERTINTOscore(student_id,subject,score)VALUES(1,'数学',95);

COMMIT;--提交事务(所有操作生效)

--ROLLBACK;--回滚事务(取消所有操作,出错时使用)

--Oracle事务(默认手动提交)

UPDATEstudentSET

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论