【数据库】03——初级开发需要掌握哪些SQL语句 1

简介: 【数据库】03——初级开发需要掌握哪些SQL语句

1 SQL查询语言概览

SQL(strctured Query Language)包括以下几个部分:

数据定义语言DDL:提供定义关系模式、修改关系模式和删除关系模式的命令

数据操纵语言DML:提供从数据库中查询信息,以及插入、删除、修改元组的能力

完整性:DDL包括完整性约束的命令,保存在数据库中的数据必须满足定义的完整性约束。

视图定义:DDL包括定义视图的命令。

事务控制:SQL包括定义事务开始点和结束点的命令。

嵌入式SQL和动态SQL。嵌入式和动态SQL定义SQL语句如何嵌入诸如C、C++和Java这样的通用编程语言。

授权:SQL和DDL包含定义对关系和视图的访问权限的命令。

在本篇文章,我们学习最基本的DDL和DML,这是SQL-92标准以来就一直存在的部分。工作中,后端开发工程师们最常用的就是这部分内容。


bda6acc19207415ebfc635cefdee392d.jpg

2 SQL数据定义

2.1 基本类型

SQL支持的基本类型如下(后续文章将介绍更多)。

char(n),定长字符串。

varchar(n),最大长度为n的变长字符串

int:整数(依赖于机器的整数的有限子集)

smallint:小整数(依赖与机器的整数类型的子集)

numeric(p,d):总长度为p,小数点右边有d位数字的指定精度定点数。

real,double precision:浮点数和双精度浮点数,精度依赖于机器

float(n):精度至少为n位数字的浮点数。

每种类型都可能包含一个空值,这是一个特殊值,表示一个缺失的值,它有可能存在但不为人所知,有可能根本不存在。在特定情况下,可能希望禁止加入空值。


char是定长的,如果存入的属性长度没有n,会追加空格补全。因此char和varchar类型的数据可能无法比较,因为即使他们存的是相同的值,也可能返回false,建议始终使用varchar避免这样的问题。下表是一些char,varchar存储数据的实例对比。


23b534994a9b4978bd112a56dda15e81.jpgSQL还提供nvarchar类型来存放使用Unicode表示的多语言数据。然而,很多数据库甚至允许在varchar类型中存放Unicode(采用utf-8形式)。

2.2 基本模式定义

(1)创建关系

创建一个关系,很简单。顺带一提,最后的分号是可选的。

    create table test
    (
      test_id int,
      test_depat_name varchar(15),
      test_price numeric(12,2) not null,
      test_desc varchar(255),
      primary key(test_id),
      foreign key(test_dept_name) references department
    );

上面使用了主键约束primary key,外键约束foreign key,非空约束 not null。值得关注的是,包括Mysql在内的数据库需要使用另一种外键约束的用法:foreign key(test_dept_name) references department(dept_name)

(2)删除关系

drop table r;

这个命令会删除r中所有元组,并且删除关系。下面的sql更弱点,会删除元组,但是保留关系。

delete form r;

(3)修改关系结构

给关系r增加属性A,其类型为D。

alter table r add A D;


删除关系中的属性。

alter table r drop A;

3 SQL查询的基本结构

在讲解前,先放下后续会用到的一些表(除此外还有department,emp这种简单的表结构)。

9bdc4dc5a6e843cc8d7f221660e491c1.jpg

3.1 单关系查询

查询并去重。

SELECT DISTINCT ename FROM emp;

SQL还允许显示指定不去重,但它是可以缺省的元素。

SELECT ALL ename FROM emp;

可以结合+,-,*,/运算符来使用select子句。

SELECT ename, salary * 1.1 FROM emp;

where子句可以增加查询条件。

select * from emp where sal between 2000 and 3000;


在SQL中,比较运算符>,<等等可以用来比较字符串、算数表达式以及特殊类型(如日期)。

3.2 多关系查询

我们可以在where子句中指定匹配条件,然后进行多关系查询。

   select 
    e.empno,e.ename,d.dname,e.deptno,d.deptno
    from 
    emp e,dept d
    where e.deptno=d.deptno;

上面的实例给关系取了别名,这是区分不同关系中的同名属性的好办法。

事实上查询时,select,from,where子句并不是顺序执行的。正确的理解如下。

1.为from所列出的关系产生笛卡尔积。

2.在1的结果上应用where子句中指定的谓词。

3.对步骤2的结果中的每个元组,输出select子句中指定的属性(或表达式的结果)。

可以料想到,where子句十分关键,否则结果会直接输出笛卡尔积,那可是相当大的数据量

c360a4f74e3b45b684ea9ba5984a3200.jpg


cc692b26201c4190aada1a60b6c83d41.jpg

4 附加的基本运算

4.1 更名运算

对属性可以使用更名运算进行更名。

SELECT emp_department AS edept FROM emp;

还可以用它来重命名关系,重命名关系的一个原因时把一个长的关系名替换成为短的。

   select 
    e.empno,e.ename,d.dname,e.deptno,d.deptno
    from 
    emp as e,dept as d
    where e.deptno=d.deptno;

除此外,一个关系与自身进行笛卡尔积运算也需要使用重命名。比如找出至少比运维部门某一位员工工资更高的所有员工姓名。

select distinct T.name
from emp as T,emp as S
where T.sal > S.sal and S.deptname = '运维部';

4.2 字符串运算

在SQL标准中,字符串的相等运算是大小写敏感的。但是在一些数据库中(如Mysql和SQL Server),在匹配字符串时并不区分大小写。

字符串可以应用许多函数运算,比如连接字符串(||),提取子串,去字符串后空格trim等等。不同数据库系统提供的函数集是不同的,具体可以查阅数据库系统手册。

使用like可以进行模糊匹配。有两个特殊的字符串可以用来描述模式。

  • 百分号%:匹配任意字串
  • 下划线_:匹配任意一个字符

模式是大小写敏感的(Mysql中除外,PostgreSQL使用ilike大小写也不敏感)。

另外,为了能够使模式包含特殊字符(%_),SQL允许使用escape关键字定义转义字符。如

like 'ab\%cd% escape '\'表示匹配以'ab%cd开头的所有字符。

SQL标准还允许我们通过not like比较运算符来搜索不匹配想。一些实现还提供了不区分大小写的变种。


一些SQL实现,特别是PostgreSQL,提供了similar to运算。它具备比like更强大的模式匹配能力,其模式定义语法类似UNIX中使用的正则表达式。

4.3 排序

使用order by关键字就可以实现排序了。desc表示降序,asc表示升序,缺省时默认升序。

    select
      empno,  ename
    from emp
    where
     hiredate between date '1980-01-01' and date '1981-01-01'
    order by empno desc;


相关文章
|
12天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
62 6
|
2月前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
58 9
【HarmonyOS Next开发】云开发-云数据库(二)
|
12天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
27 2
|
2月前
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
92 13
|
2月前
|
存储 前端开发 关系型数据库
鸿蒙开发:实现键值数据库存储
对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式
101 2
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
88 11
|
2月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
3月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
238 14
|
2月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
3月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句

热门文章

最新文章