首页 > 数据库 >SQL 基础

SQL 基础

时间:2023-05-19 21:55:13浏览次数:44  
标签:ename 函数 基础 emp SQL deptno 连接 select

SQL 基础

条件查询

语法格式:

select
字段1,字段2...
from
表名
where
条件;

执行顺序:

先from,然后where,最后select.
<,>,<=,>=,<>,!=,and,between…and….,is null,is not null,or,in,not in,and和or联合使用(in等同于or)
模糊查询like

函数

字符函数:

length函数 select length('john');
concat函数拼接字符串
upper、lower函数改变大小写
substr、substring函数截取,索引从1开始
instr函数返回字符串第一次出现的索引,若找不到,则返回0

数学函数:

round()函数四舍五入
ceil函数向上取整
floor函数向下取整
truncate函数截断
mod函数取余

日期函数:

now函数
curdate函数返回当前日期,不包含时间
curtime函数返回当前时间,不包含日期
获取指定部分,年,月,日 select year(now()) as '年';
str_to_date函数
date_format函数

分组函数:

count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
分组函数自动忽略NULL。

count(*) filter (where ..)

排序:

asc表示升序,desc表示降序。

完整的DQL语句:select … from … where … group by … having … order by … limit …
执行顺序 5 1 2 3 4 6 7

内连接

内连接之等值连接:

SQL92语法:
select
e.ename,d.dname
from
emp e, dept d
where
e.deptno = d.deptno;

SQL99语法:
select
e.ename,d.dname
from
emp e
join
dept d
on
e.deptno = d.deptno;

内连接之非等值连接:

select
e.ename, e.sal, s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。

内连接之自连接

查询员工的上级领导,要求显示员工名和对应的领导名?技巧:一张表看成两张表。
select
a.ename as '员工名', b.ename as '领导名'
from
emp a
join
emp b
on
a.mgr = b.empno; //员工的领导编号 = 领导的员工编号

外连接

外连接(右外连接):

select
e.ename,d.dname
from
emp e
right join
dept d
on
e.deptno = d.deptno;

// outer是可以省略的,带着可读性强。
right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将
这张表的数据全部查询出来,捎带着关联查询左边的表。
在外连接当中,两张表连接,产生了主次关系。

外连接(左外连接):

select
e.ename,d.dname
from
dept d
left join
emp e
on
e.deptno = d.deptno;

// outer是可以省略的,带着可读性强。
带有right的是右外连接,又叫做右连接。
带有left的是左外连接,又叫做左连接。
任何一个右连接都有左连接的写法。
任何一个左连接都有右连接的写法。

全连接 full join:

FULL OUTER JOIN 关键字返回左表(left_table)和右表(right_table)中所有的行。

如果 "left_table" 表中的行在 "right_table" 中没有匹配或者 "right_table" 表中的行在

"left_table" 表中没有匹配,也会列出这些行。
a1

img

a2

img

select a1.ID, name, number, a2.ID, name1, age from a1 full join a2 on a1.ID=a2.ID

结果

img

子查询:

select
..(select).
from
..(select).
where
..(select).

union合并查询结果集

select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';
union的效率要高一些。对于表连接来说,每连接一次新表,
则匹配的次数满足笛卡尔积,成倍的翻。。。
但是union可以减少匹配的次数。在减少匹配次数的情况下,
还可以完成两个结果集的拼接。

limit(非常重要)

完整用法:limit startIndex, length
startIndex是起始下标,length是长度。
起始下标从0开始。

缺省用法:limit 5; 这是取前5.

约束

非空约束:not null
唯一性约束: unique
主键约束: primary key (简称PK)
外键约束:foreign key(简称FK)
检查约束:check(mysql不支持,oracle支持)

标签:ename,函数,基础,emp,SQL,deptno,连接,select
From: https://www.cnblogs.com/liurui12138/p/17416410.html

相关文章

  • Mysql重置主键id顺序
     消除因删除而产生错乱的主键id顺序altertable  表名  dropcolumnid;altertable  表名  addidmediumint(8)notnullprimarykeyauto_incrementfirst;  ......
  • 通用的CRUD之Sqlite
    前言SQLite是一种轻量级的关系型数据库管理系统,支持跨平台操作。它可以嵌入到程序中,无需单独的服务器进程或者配置文件,减少了数据库维护的负担和运行的复杂性。SQLite的数据存储在单个文件中,方便备份、传输和分享,也容易进行版本管理。SQLite拥有良好的性能、可靠的稳定性和丰富的......
  • sql--每天两道sql题,天天健康好身体_第五天
    每天会在网上找两三道sql题练习练习,提高自己的sql语句的使用能力(先自己思考出答案,再和别人的答案做一下对比,然后深入思考一下)以下是四个表信息:问题1:查询姓“王”的老师的个数答案1:selectcount(tid)fromteacher_info_tablewheretnamelike"王%"思考:简单,记住like的用法......
  • 河北王校长MySQL
    河北王校长MySQL索引b+树数据结构\数量级\存储内容b+树优势、对比哈希表\数组\b树\跳表跳表不适用磁盘存储介质、指针管理难以适应联合索引、出现时间晚hash不支持最左前缀和范围查找数组成本过高b树树型过高,io多最左前缀原则索引覆盖索引下推扩充showindex命......
  • jsp页面连接mysql数据库报错“com.mysql.jdbc.Driver”
    今天在做web实验的时候数据库突然连不上了以下是报错我用的mysql包为mysql-connector-java:5.1.47找了好久后来在一篇博客的启发下,那篇博客中说把一般包为web下lib目录中后来我仔细观察,发现我添加的包在WEBINF目录下的classes下的lib中,难怪找不到我把它移动到外面就可以了......
  • sqlmap的一些简单使用命令
    路径C:\Users\Administrator\AppData\Local\Programs\Python\Python39\sqlmappost型注入*每次使用都要重新抓包,不可以使用旧的数据包sqlmap-r目标文件直接把post.txt拖进去回车(~ ̄▽ ̄)~得到数据库名和版本使用sqlmap.py-r目标文件--current-db爆当前数据库*使用sqlmap.py-r......
  • python基础07
    字符串的内置方法(较多,重要)lower&upperold_code='KeViN'print('验证码:%s'%old_code)s=input('请输入验证码:>>>').strip()ifold_code.lower()==s.lower():#lower改为全小写print('验证成功')elifold_code.upper()==s.up......
  • mysql按顺序递增(出现不连续问题)
    问题在表中添加新记录时,自动递增不连续(之前出现过了473,之后删除473,再插入新纪录,新纪录的id是474,我想让他的id为8)(用springboot+mybatis-plus插入新纪录)解决第一步1.如果是InnoDB引擎:将该字段先取消“自动递增”,去掉“不是null”的对勾,取消“主键”,并保存。如下图设置:第二......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
    前言接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。安装ORM框架,这里我们采用EFCore安装EFCore我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和......
  • MySQL 插入数据
    MySQL插入数据MySQL表中使用INSERTINTOSQL语句来插入数据。你可以通过mysql>命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。语法以下为向MySQL数据表插入数据通用的INSERTINTO SQL语法:INSERTINTOtable_name(field1,field2,...fieldN)......