高级查询

高级查询以及导入导出,表的复制、重命名,

  • 1.子查询
    定义:一个查询语句中嵌套另一个查询
  • 例如
  • 查询金额超过平均值的订单
    select * from orders where amt >(select avg(amt) from orders);
  • 查询所有名字以D开头的客户下的订单
select * from orders where cust_id in(select distinct cust_idfrom customerwhere cust_id like 'c%');
  • 说明
括号找那个的部分称为子查询
-- 子查询可以返回一个值也可以多个值
-- 根据外层查询的要求来确定
-- 先执行子查询,将子查询的结果,作为外层查询的条件,在执行外层查询
  • 联合查询
什么是联合查询:也叫连接查询,将多个表中的数据进行连接,得到一个查询结果集什么情况下使用联合查询:当从一个表无法查询到想要的数据时,使用联合查询前提:联合的表之间一定要有逻辑上的关联性笛卡尔积(联合查询的理论依据)什么是笛卡尔积:两个集合的乘积,产生一个新的集合,表示两个集合所有的可能的组合情况笛卡尔积和关系:笛卡尔积中,去掉没意义或不存在的组合,就是关系(规范的二维表)
  • 连接查询

内连接(inner Join):没有关联到的数据不显示

  • 例如:查询订单编号、金额、客户名称、客户电话
  1. 方式一:where进行条件关联

    select orders.order_id,orders.amt,customer.cust_name,customer.tel_no
    from orders,customer where orders.cust_id = customer.cust_id;
    
  2. 方式一起别名

    select a.order_id,a.amt,b.cust_name,b.tel_no
    from orders a,customer b where a.cust_id = b.cust_id;
    
  3. 方式二:利用inner、jion关键字

     select a.order_id,a.amt,b.cust_name,b.tel_nofrom orders a inner join customer bon a.cust_id = b.cust_id;

外连接(outer JOIN)没有关联到的数据也会现在到结果当中
左连接:以左表为基准,右表的数据进行关联
左表数据全部显示,右表中的字段如果没有关联到,
则显示NULL

select a.order_id,a.amt,b.cust_name,b.tel_no
from orders a left join customer b
on a.cust_id = b.cust_id;

右链接:以右表为基准,左表的数据进行关联
右表数据全部显示,左表中的字段
如果没有关联到,则显示NULL

select a.order_id,a.amt,b.cust_name,b.tel_no
from orders a right join customer b
on a.cust_id = b.cust_id;
  • 3)约束
    – 1)什么是约束,数据必须遵循的规则
    – 2。目的:保证数据一致性,完整性
    – 从数据库层面对数据进行;安检
    – 3)分类
    – 1)非空约束
    – 定义:not null 要求字段的值不能为空
    – 2)唯一约束
    – 定义:unique 字段的值 不能重复。
    – 语法:字段名称 类型(长度)unique
    – 3)主键(primary key ,简写pk):非空、唯一
    – 定义:主键在表中唯一标识,区分一个实体,非空,唯一
    – 语法:字段名称 类型(长度)primary key
-- 创建一个新的表,设定为非空,唯一,主键create table t1(stu_no varchar(32) primary key ,stu_name varchar(32) not null ,id_card_no varchar(32) unique);
--     插入一个正常的数据insert into t1 values('001','jerry','54454555545');
--     插入一个姓名为空的数据、报错insert into t1 values('002',null ,'255454');
--     插入一个id_card_no 为重复的数据、报错insert into t1 values('003','xiaoming',255454);
--     插入一个主键为空的、报错insert into t1(stu_no,stu_name)values (null ,'Dekie');
--     插入主键stu_no值重复,报错insert into t1(stu_no ,stu_name)values('001','Dokas');
  • 4)默认值
    – 定义:指定某个字段的默认值,如果新插入一笔数据没有对该字段赋值,
    – 系统会自动填入一个默认值。
  • 5)自动增长(auto_increment)
    – 定义:当某一个字段被设置为自增长时,插入时不需要赋值,系统在原
    – 最大基础上自动加1(要求:要求这个字段必须是主键或者设置了unique约束。
    – 语法:字段名称 类型(长度)auto_increment
创建一个t2的新表。设置id 为整形并且设置主键且自动增加
status设置默认为0.
create table t2(
id int primary key auto_increment,
name varchar (32),
status int default 0
);
插入一个id 为空的值。
insert into t2 values (null,'Jerry',1);
insert into t2 values (null,'Tom',2);
从插入两个指定值,status为空,查看结果
insert into t2(id,name) values (null,'Hennry');
  • 6)外键约束(foreign key,简称fk)
    – 什么是外键,一种约束,建立在外键的前提是;
    – 某个字段在当前表中不是pk,但在另外表(也称为’外表’)是主键
    – 作用:保证被参照的实体一定存在(参照的完整性)
    – 字段呗设置外键约束后,影响有;
    – 当插入一个在外表中不存在的实体时。报错
    – 当删除外表中已经被参照的实体,报错

    • 创建外键语法:
      创建course(课程信息表,主键course_id)
      创建teacher(教室信息表,主键course_id,在course_id字段创建外键)
create table course(
course_id varchar (32) primary key,
name varchar (32)
);
create table teacher(
id int auto_increment primary key,
name varchar(32),
course_id varchar(32),
constraint fk_course foreign key(course_id)
references course(course_id)
);
insert into course
values ('0001','Python编程');insert into teacher
values (1,'Jerry','0001');delete from course where course_id = '0001';
insert into teacher values(2,'Jerry','0003');

外键使用的条件
表的存储引擎必须为innodb
外键字段在另外表中必须是主键
当前表、外表中字段类型必须一致。

  • 随手练习
创建表 t6 id ,name,status,course_id,tel_no五个数据,create table t6(
id int ,name varchar(32),
status int,course_id varchar(4),
tel_no varchar(32));
#修改   id  为主键
alter table t6 add primary key(id);
#修改  id  为整形并且自动增长
alter table t6 modify id int auto_increment;
#修改 status 为整形并且默认为0
alter table t6 modify status int default 0;
#修改  tel_no  为字符串并且唯一
alter table t6 modify tel_no varchar(32) unique ;
#修改  course_id  为course表的外键
alter table t6 add constraint fk_course_id
foreign key(course_id)
references course(course_id);
  • 导出&导入
    语法
select 查询语句
into outfile '文件路径'
fields terminated by '字段分割符'
lines terminated by '行分割符'

示例:导出orders表中所有的数据

select * from orders
into outfile '/var/lib/mysql-files/orders.csv'
fields terminated by ','
lines terminated by '\n'

查看导出的文件(linux Shell下执行):

sudo cat /var/lib/mysql-files/orders.csv
  • 导入
    语法
load data infile '备份文件路径'
into table 表名称
fields terminted by ','
lines termintedby '\n';

导入数据

load data infile '/var/lib/mysql-files/orders.csv'
into table orders
fields terminated by ','
lines terminated by '\n';
  • 表的复制、重命名
    表的复制
    将orders数据,表结构全部复制到orders_new表
create table orders_new
select * from orders;

将orders结构复制到orders_new表

create table orders_new
select * from orders where 1=0;
该方式不会讲键的属性复制到新表中。
  • 表的重命名
    讲orders重命名为orders_bak
alter table orders rename to orders_bak;
alter table orders_bak rename to orders;

数据库SQL的高级查询相关推荐

  1. ORACLE---Unit04: SQL(高级查询)

    ---(重点复习:子查询.分页查询.decode) --- SQL(高级查询) --- 子查询 --- 子查询是嵌套在其它SQL语句当中的,目的是为嵌套的SQL提供数据,以便其执行. ---查看谁的工 ...

  2. sql server高级查询及更新操作一

    sql server高级查询及更新操作一 题目要求 实现代码 题目要求 一.将素材中的"学生管理"数据库附加到SQL SERVER中,完成以下操作: 班级信息(班级编号 班级名称 ...

  3. 4.数据库表的高级查询

    4.数据库表的高级查询 4.1   in    使用场景:查询时,条件字段的值存在某个数据集中 数据集:可以是具体的某几个值,也可以是通过一个子查询得到的数据集 select ... from 表名 ...

  4. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

  5. java回顾:MyBatis参数、sql片段、动态sql、高级查询

    目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...

  6. Mysql 数据库 -------- SQL语句进阶查询 ------- 后部分

    Mysql ---- SQL高级查询 连接查询 内连接 外连接 数据库函数 数学函数 聚合函数(给数据表用的) 字符串函数(字符串用''格式) 日期时间函数 存储过程 创建存储过程 创建存储过程中的传 ...

  7. SQL语句高级查询一、二(刚入门 的也能看懂)

    高级查询(一) 一.where条件表达式 SELECT column1, column2- FROM tablename [WHERE condition]; name = "张三" ...

  8. SQL Server数据库的T-SQL高级查询

    一.查询使用的函数 请自行创建数据库和表,表中插入数据,我的样例如下: create database accp; <!--创建accp数据库--> use accp; <!--切换 ...

  9. SQL Server高级查询之数据库安全管理 第六章节

    1.SQL Server身份验证模式为 windows身份验证和SQL Server身份验证 2.数据库用户管理 (1.)当别人访问自己数据库时候,就必须先创建数据库用户 创建数据库用户步骤如下: 在 ...

最新文章

  1. SAP S4 OP/Cloud大乱斗
  2. 关于DB2 MQT 增量更新,出错代码详细说明
  3. 哈夫曼编码(Huffman)Java实现代码
  4. 2021-07-15
  5. 安卓开发 登录用户信息缓存_小程序云开发之用户注册登录
  6. 基于微服务架构的token生成和使用
  7. 关于web性能一些特性汇总
  8. liveness 生存性/活性
  9. 安卓Android Support Design Library——Snackbar
  10. 使用SQLite数据库存储数据(4)-删除数据记录
  11. python 爬虫生成csv文件和图_Python简单爬虫导出CSV文件的实例讲解
  12. matlab的比较器模块,simulink中比较器
  13. 虚拟机找不到文件路径
  14. shopex mysql索引_mysql版本太高导致shopex4.8.5无法安装
  15. java实现excel转pdf_java实现excel转pdf(poi+itext)
  16. 如何学习Photoshop
  17. 如何提升公众号的阅读量?提高公众号阅读量的方法介绍
  18. android多个悬浮窗口的实现,android实现桌面移动悬浮窗口
  19. java word文档生成目录_Java使用POI添加Word文档的目录(Table of contents)
  20. LAN、WAN、WLAN、VLAN的区别

热门文章

  1. 从零搭建飞冰微前端项目《第一篇:优势分析》
  2. 关于推进海洋测绘工作的思考
  3. “网络吸血鬼” Leech
  4. 【Project Report】基于 QP 的优化选股策略
  5. ESP32设备驱动-MicroSD Card驱动
  6. 为什么cinder-volume在删除volume时无反应 (by quqi99)
  7. SCP,NFS,TFTP的初步认识
  8. python打包成pyc文件发布_Python 使用pyinstaller将py文件发布成exe程序
  9. 2023养老展|山东养老用品展|老年护理产品展|医养健康展
  10. Enterprise Architect教程