精华内容
下载资源
问答
  • Oracle数据库update用法总结

    千次阅读 2019-05-23 10:28:35
    1.用子查询更新关联数据: update 表名 set (字段1,字段2,)=(select 字段1,字段2 from 表名 where 限定条件1) where 限定条件2

    1.用子查询更新关联数据:

    update  表名
    set (字段1,字段2,)=(select 字段1,字段2 from 表名 where 限定条件1)
    where 限定条件2
    
    
    展开全文
  • SQL数据库

    万次阅读 多人点赞 2018-03-10 23:06:24
     数据库就是一个文件系统,访问数据的时候需要通过标准的SQL语言来完成。关系型的数据  保存的实体与实体之间的关系。(用户、商品、订单)常见的数据库  Oracle 公司Oracle(甲骨文)数据产品,收费的大型的...

    MySQL数据库

    数据库
            数据库就是一个文件系统,访问数据的时候需要通过标准的SQL语言来完成。
    关系型的数据
            保存的实体与实体之间的关系。(用户、商品、订单)
    常见的数据库
            Oracle 公司Oracle(甲骨文)数据产品,收费的大型的数据库。
            MySQL 开源的,被Oracle收购了,小型的数据库。5.x版本免费,6.x收费了。
            SQLServer 微软的,收费的中型的数据库。
            DB2 IBM公司收费的大型的数据库。
            SyBASE PowerDigener软件(非常牛)

            已退出了历史舞台,PowerDigener(数据库建模工具)

    MySQL访问:

    cmd > 输入命令 mysql -u root -p 回车
    输入密码 回车
            密码重置
    1.停止mysql服务:
            services.msc 进入到服务界面
    2.在cmd>输入一个命令:
            mysqld --skip-grant-tables (开启一个mysql服务,不需要进行认证.)
    3.新打开一个cmd窗口
            mysql -u root -p  不需要输入密码.就可以进入.
    4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
    5.修改密码的语句:
            update user set password=password('root') WHERE user='root';
    6.将两个窗口都关闭.
    7.任务管理器中结束(mysqld)进程.

    8.重启mysql服务

            输入net start mysql 回车即可启动,输入net stop mysql 回车即可关闭。

            方法二:选择计算机(我的电脑)右击鼠标,选择管理,在选择系统和应用服务下面的服务。找到MySQL,右击选择启动或停止。

    SQLyog 连不上MySQL , ERROR NO.1045 简单的解决方法

    1。停止MySQL服务:运行net stop mysql

    2。修改MySQL源文件夹中的my.ini,运用查找功能找到【mysqld】,在其下加上一行 skip-grant-tables,保存。

    3。启动MySQL服务:运行net start mysql

    4。ok了

    MySQL之间的关系(看图)

    MySQL数据库服务器、数据库和表关系

            所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

            为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

            数据库服务器、数据库和表的关系如图所示:

    总结:

    一个数据库的服务器中有多个数据库,一个数据库中有多个表,
    每个表有多个字段。字段和Java中类的属性是对应的。
    每一条记录对应是一个Java实例对象。


     

    SQL语句(*****)

    SQL的简介

            Structured Query Language, 结构化查询语言
            非过程性的语言
            过程性的语言:我下一条语句,需要依赖上一条或者上几条语句。 Oracle开发PL/SQL,只能在Oracle使用  * SQL Server、Sybase的T-SQL
            非过程性的语言:写一条语句,就会执行一个结果。

    SQL语言分类

    DDL(数据定义语言)

            •数据定义语言 - Data Definition Language

            •用来定义数据库的对象,如数据表、视图、索引等

    DML  (数据操纵语言)

            •数据处理语言 - Data Manipulation Language

            •在数据库表中更新,增加和删除记录

            •如 update, insert, delete

    DCL(数据控制语言)

            •数据控制语言 – Data Control Language

            •指用于设置用户权限和控制事务语句

            •如grant,revoke,if…else,while,begintransaction

    DQL(数据查询语言)

            •数据查询语言 – Data Query Language

                    select

    * 数据库(CURD -- 增删改查)

     创建数据库

            * 语法:create database 数据名称; 创建一个数据了。
            * create database 数据库名称 character set 编码 collate 校对规则;
            * 校对规则:和编码是成对出现的。
            * 练习
                    创建一个名称为mydb1的数据库。
                            create database mydb1;
                    创建一个使用utf8字符集的mydb2数据库。
                            create database mydb2 character set 'utf8';
                    创建一个使用utf8字符集,并带校对规则的mydb3数据库。
                            create database mydb3 character set 'utf8' collate 'utf8_bin';

     查看数据库 show databases;

    * 查询数据库的定义信息 show create database 数据库;
            show create database mydb2;

    删除数据库 drop database 数据库名称;

            练习
            查看当前数据库服务器中的所有数据库
                    show databases;
            查看前面创建的mydb2数据库的定义信息
                    show create database mydb2;
            删除前面创建的mydb1数据库
                    drop database mydb1;

    修改数据库

            * 语法:alter database 数据库 character set 编码 collate 校对规则;
                    * 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
                            alter database mydb2 character set 'gbk';
    其他的操作
    * 切换数据库(*****) use db_name;
    * 查看当前使用的数据库 select database();

    表(table)(CURD -- 增删改查)

    语法:
            create table 表名(
                    字段1 类型(长度) 约束,
                    字段2 类型(长度) 约束,
                    字段3 类型(长度) 约束,
                    字段4 类型(长度) 约束
            );
    注意:

      * 表名小括号,后面要有分号
            * 每一行字段后面要有逗号,但是最后一行没有逗号
            * 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11
            public class User{
                    int id;
                    String name;
                    String pass;
                    String eamil;
                    String nikename;

            }

    数据的类型

    字符串型 
            VARCHAR、CHAR
            * varchar和char区别:
            * varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
            * char 长度不可变的。   name char(8) 存入的数据hello,如果不够用空格补全。 * 效率高:char效果。
    大数据类型(一般不用)
            BLOB、TEXT
            BLOB:二进制文件
            TEXT:字符
    数值型
            TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    逻辑性 对应boolean
            BIT
    日期型
            DATE、TIME、DATETIME、TIMESTAMP
            * date 只包含日期
            * time 只包含时分秒
            * datetime和timestamp包含日期和时分秒区别:
            * datetime需要手动录入时间。
            * timestamp不传入数据,默认选择当前系统时间。
    * 练习,创建表的练习

    create table employee(
        id int,
        name varchar(20),
        gender varchar(10),
        birthday date,
        entry_date date,
        job varchar(100),
        salary double,
        resume text
    );

    创建数据表时,只有字符串类型必须写长度,而其他类型都有默认长度  

    MySQL常用数据类型

    java中 String char  -----  mysql 中字符串型 char varchar

            *char是定长 varchar是变长

    例如:char(8)保存 lisi,因为lisi 只有四个字符,所有会补充四个空格,成为8个字符存入 char(8)中 ,如果有 varchar(8) 自动根据存放内容改变长度

    java中 byte short int long float double ----- mysql 中数值类型 TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

    java中 boolean ---- mysql 逻辑性 bit 存放一位数值 0 或者1

    java中 Date ----- mysql 日期类型 date (只有日期) time(只有时间) datetime(日期时间都有)timestamp(日期时间都有 )

    *datetime和timestamp 表现形式上完全相同,区别就在于timestamp 在数据库可以自定更新(当前时间)

    java中大数据类型 inputStream 二进制文件 Reader 文本文件 ------- mysql 大数据类型 blob(存放大二进制数据)text(存放大的文本文件)

    *tinyblob tinytext 255字节 blob text 64KB mediumblob mediumtext 16MB  longblob longtext 4GB

    * 约束(单表)

    作用:约束用来保证数据有效性和完整性

    * 主键约束(*****)
            * 标识标记该条记录。 通过pramary key声明主键。(默认唯一、非空)
    * auto_increment 数据库维护主键。自动增长。
    * 唯一约束
            * 值是唯一的。使用unique声明
    * 非空约束
            * 值不能为空 not null
    * 创建新的标签employee2,把约束加上。

    create table employee2(
        id int primary key auto_increment,
        name varchar(20) unique not null,
        gender varchar(10) not null,
        birthday date not null,
        entry_date date not null,
        job varchar(100) not null,
        salary double not null,
        resume text not null
    ); 

    * 使用desc 表名; 查看表的信息
    * show tables ; 查看当前库内所有表名
    * show create table 表名; 查看建表语句和字符集

    主键约束primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键唯一非空

    唯一约束unique : 该字段的值不允许重复

     一张表中可以有很多个唯一约束,只能有一个(两个)作为主键约束

    非空约束 not null :该字段的值不能为空

    * 删除表
            drop table employee2;
    * 修改表
            alter table 表名 add 字段 类型(长度) 约束; -- 添加字段
            alter table 表名 drop 字段; -- 删除字段
            alter table 表名 modify 字段 类型(长度) 约束; -- 修改类型或者约束
            alter table 表名 change 旧字段 新字段 类型(长度) 约束 -- 修改字段的名称
            rename table 表名 to 新表名; -- 修改表名
            alter table 表名 character set utf8; -- 修改字符集
    练习
    在上面员工表的基本上增加一个image列。
            alter table employee add image varchar(20);
    修改job列,使其长度为60。
            alter table employee modify job varchar(60);
    删除gender列。
            alter table employee drop gender;
    表名改为user。
            rename table employee to user;
    修改表的字符集为utf8
            alter table user character set utf8;
    列名name修改为username
            alter table user change name username varchar(30);

    数据(CURD -- 增删改查)(******)

     添加数据
            * insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...); 有几列就插入多少的值。
            * insert into 表名 values(值1,值2,值3...); 插入所有的列
     注意:

           数据与字段的类型相同。
           字段长度需要控制。

           字符串或者日期类型需要使用''

            在values中列出的数据位置必须与被加入的列的排列位置相对应

            字符和日期型数据应包含在单引号中。

            插入空值:不指定或insert into table values(null)

    * 向user表中插入数据

    insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
    insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');
    insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');
    insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');
    insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc'); 

    解决中文乱码的问题(*****)

    [client]
    port=3306
    [mysql]
    default-character-set=gbk
    修改完需要重新启动服务。

    mysql有六处使用了字符集,分别为:client、connection、database、results、server 、system。

            client客户端使用的字符集。

            connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。      

            database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。   

            results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。      

            server服务器安装时指定的默认字符集设定。      

            system是数据库系统使用的字符集设定。(utf-8不可修改)

    通过修改my.ini 修改字符集编码,重启MySQL的服务

     修改语句

            * 语法: update 表名 set 字段=值,字段=值... [where ]
                    * 如果没有where条件,默认更新所有的记录。
                    * 有where提交,选择某一条记录。
    将所有员工薪水修改为5000元。
            update user set salary=5000;
    将姓名为’班长’的员工薪水修改为3000元。
            update user set salary=3000 where username='班长';
    将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
            update user set salary=4000,job='BOSS' where username='美美';
    将班长的薪水在原有基础上增加1000元。
            update user set salary = salary+1000 where username='班长';

    删除数据 delete

    语法:delete from 表名 [where ]; 删除数据
    truncate 表名; 删除所有的数据
    * truncate 和 delete的区别:

    truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)

    delete删除数据,一条一条删除的。(*****)

    事物(insert update delete)
    删除表中名称为’班长’的记录。
            * delete from user where username='班长';
    删除表中所有记录。
            * delete from user;
    使用truncate删除表中记录。

            * truncate user;

    Delete语句不能删除某一列的值(可使用update)

    使用delete语句仅删除记录,不删除表本身。如要删除表,使用droptable语句。

    同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

     外键约束

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。
    rollback   回滚的意思。  就是数据库里做修改后 ( update  ,insert  , delete)未commit 之前   使用rollback   可以恢复数据到修改之前。

    * 查询语句

            语法: select * from 表名; 查询所有(字段)

    select 字段名1,字段名2,字段名3 from 表名; 显示查询字段名
    select DISTINCT 字段名 from 表名; 去除重复的数据。
    查询表中所有学生的信息。
            select * from stu;
    查询表中所有学生的姓名和对应的英语成绩。
            select name,english from stu;
    过滤表中重复数据。(面试题)
            select distinct english from stu;

    select 指定查询哪些列的数据。

    column指定列名。

    *号代表查询所有列。

    from指定查询哪张表。

    DISTINCT可选,指显示结果时,是否剔除重复数据

    * 查询的列可以运算
    * 可以使用别名:使用as 别名 并且as可以省略。
    练习:
    在所有学生分数上加10分特长分。
            select name,math+10,english+10,chinese+10 from stu;
    统计每个学生的总分。
            select name,math+english+chinese from stu;
    使用别名表示学生分数。
            select name,(math+english+chinese) as sum from stu;
    * 使用where条件过滤
    查询姓名为班长的学生成绩
            select * from stu where name='班长';
    查询英语成绩大于90分的同学
            select name,english from stu where english < 15;
    查询总分大于200分的所有同学
            select name,math+english+chinese from stu where (math+english+chinese) > 200;
    * 常用的符号
    >   <   <=   >=   =    <>(不等于)
    in(范围内取内容)
    like -- 模糊查询 写法:like '张_或者%'; _和%区别:占位符。_只一个,%可以有多个
    %的写法 like '%张'; 结果XXX张
    like '张%'; 结果张XXX
    like '%张%'; 只要有张就行
    is null -- 判断是否为null
    and -- 并且
    or -- 或者
    not -- 不成立
    * 练习
    查询英语分数在 80-90之间的同学。
            select * from stu where english >80 and english <90;
            select * from stu where english between 80 and 90;
    查询数学分数为18,78,46的同学。(in)
            select * from stu where math in(18,78,46);
    查询所有姓班的学生成绩。
            select * from stu where name like '班%';
    查询数学分>80,语文分>80的同学。
            select * from stu where math >80 or chinese > 80;

    查询语文没有成绩学员select * from exam where chinese is null;

    查询语文有成绩学员select * from exam where chinese is not null;

    * 排序 使用order by 升序默认的(asc)/降序(desc)
    * 出现select的语句末尾
    练习
    对数学成绩排序后输出。
            select name,math from stu order by math;
    对总分排序按从高到低的顺序输出
            select name,math+english+chinese from stu order by (math+english+chinese) desc;
    对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
            select * from stu order by english desc,math desc;
    对姓美的学生成绩排序输出
            select * from stu where name like '美%' order by english desc;

    聚集函数

    count 获取数量
    练习:
    统计一个班级共有多少学生?
            select count(*) from stu;
    统计数学成绩大于90的学生有多少个?
            select count(*) from stu where math > 90;
    统计总分大于150的人数有多少?
            select count(*) from stu where (math+english+chinese) > 150;
    * sum 求和(忽略null值) 可以同ifnull(xxx,0)
    统计一个班级数学总成绩?
            select sum(math) from stu;
    统计一个班级语文、英语、数学各科的总成绩
            select sum(math),sum(english),sum(chinese) from stu;
    统计一个班级语文、英语、数学的成绩总和
            select sum(ifnull(math,0)+english+chinese) from stu;
            select sum(math)+sum(english)+sum(chinese) from stu;
    统计一个班级语文成绩平均分

            select sum(chinese) / count(*) from stu;

    注意:sum仅对数值起作用,否则会报错。

    注意:对多列求和,“,”号不能少。

    ifnull(xxx,0)如果为null,则值是0

    avg 平均数
    练习:
    求一个班级数学平均分?
            select avg(math) from stu;
    求一个班级总分平均分
            select avg(ifnull(math,0)+english+chinese) from stu;
    * max 最大值
            select max(math) from stu;
    * min 最小值
            select min(math) from stu;
    * group by 分组(一起使用) 条件过滤需要是having,不能使用where
    练习:对订单表中商品归类后,显示每一类商品的总价.
            select product,count(*),sum(price) from orders group by product;
    练习:查询购买了几类商品,并且每类总价大于100的商品

            select product,sum(price) from orders group by product having sum(price) > 100;

    GROUPBY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。

    注意,使用GROUPBY 时,SELECT 子句中只能由以下部分组成:

    1.汇总函数

    2.GROUP BY 中出现的列名

    3.1和2 通过函数和表达式的结果

    例如:

    SELECT A_ID ,COUNT(*) FROM C GROUP BY A_ID;   =>合法

    SELECT A_DATE,COUNT(*) FROM C GROUP BY A_ID;=>不合法,如图示中的按A_ID分组后,对于其他各列的查询只能是汇总查询,否则没有意义

    * 小结 select 语句 S-F-W-G-H-O 组合 select ... from ... where ... group by... having... order by ... ; 

    顺序不能改变

    试题:where和 having 条件语句的区别 ?

    where是在分组前进行条件过滤,having 是在分组后进行条件过滤

    使用where地方都可以用having替换 , 但是having可以使用分组函数,而where后不可以用分组函数 

    create table orders(
        id int,
        product varchar(20),
        price float
    );
    insert into orders(id,product,price) values(1,'电视',900);
    insert into orders(id,product,price) values(2,'洗衣机',100);
    insert into orders(id,product,price) values(3,'洗衣粉',90);
    insert into orders(id,product,price) values(4,'桔子',9);
    insert into orders(id,product,price) values(5,'洗衣粉',90);
    
    insert into orders(id,product,price) values(6,'电视',900);

    备份、恢复数据库

    备份数据库表中的数据

            •cmd> mysqldump -u 用户名 -p 数据库名> 文件名.sql

    恢复数据库前提创建空的数据库,并且use

            source 文件名.sql   // 在mysql内部使用

            mysql –u 用户名 p 数据库名 <文件名.sql  // 在cmd下使用

    MySQL数据库的备份和恢复

    1、备份命令mysql/bin/mysqldump 将数据库SQL语句导出

            语法:mysqldump-u 用户名 -p 数据库名 > 磁盘SQL文件路径

                    例如:备份day12数据库 --- c:\day12.sql

                            cmd> mysqldump -u root -p day12 > c:\day12.sql 回车输入密码

                            INSERTINTO `exam` VALUES(1,'关羽',85,76,70),(2,'张飞',70,75,70),(3,'赵云',90,65,95),(4,'刘备',NULL,55,38);

    2、恢复命令mysql/bin/mysql 将sql文件导入到数据库

            语法:mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径

    *****导入SQL 必须手动创建数据库 ,SQL不会创建数据库

    例如:将c:\day12.sql导入 day12数据库

            cmd> mysql -u root -p day12 < c:\day12.sql 回车密码

    补充知识:恢复SQL也可以在数据库内部执行source c:\day12.sql 

     多表操作

    * 外键约束
    * 有一个部门的表,还有一个员工表,

    create database day16;
    use day16;
    create table dept(
    did int primary key auto_increment,
    dname varchar(30)
    ); 
    create table emp(
    eid int primary key auto_increment,
    ename varchar(20),
    salaly double,
    dno int
    ); 
    insert into dept values(null,'研发部');
    insert into dept values(null,'销售部');
    insert into dept values(null,'人事部');
    insert into dept values(null,'扯淡部');
    insert into dept values(null,'牛宝宝部'); 
    insert into emp values(null,'班长',10000,1);
    insert into emp values(null,'美美',10000,2);
    insert into emp values(null,'小凤',10000,3);
    insert into emp values(null,'如花',10000,2);
    insert into emp values(null,'芙蓉',10000,1);
    insert into emp values(null,'东东',800,null);
    insert into emp values(null,'波波',1000,null); 
    update emp set salaly=2500 where eid = 5; 

    * 把研发部删除?
    * 研发部下有人员?该操作不合理。
    * 引入外键约束?

    * 作用:保证数据的完整性。

    定义外键约束

    •1,可以直接在create语句中定义外键

            •foreign key 当前表名 (字段名) references 目标表名 (目标表的主键)

    ,2,创建完语句后,可以直接使用修改语句定义

            •alter table 表名 add foreign key 当前表名 (字段名) references 目标表名 (目标表的主键);

    * 添加外键
    语法:alter table emp add foreign key 当前表名(dno) references 关联的表(did);
            alter table emp add foreign key emp(dno) references dept(did);
    * 数据库的设计
    * 一对多 生活中一个部门下有多个员工,一个员工属于一个部门。
            在多方需要添加一个字段,并且和一放主键的类型必须是相同的。
            把该字段作为外键指向一方的主键。
                    一方部门
                    多方员工
    * 多对多
            学生可以选择多门课程,课程又可以被多名学生选择。
    建表原则:
    * 拆开两个一对多的关系,中间创建一个中间表,至少有两个字段。作为外键指向两个多对多关系表的主键。
    * 一对一(了解)
    * 公司,地址,一个公司对应的是一个地址。 一张表包含公司名称、公司地址。
    * 根据公司的业务需求,会把公司这张表拆开,形成一对一。
    * 建表原则
            * 主键对应

            * 唯一外键对应

    建表原则

    第一种是主键对应

            •将两个表的主键进行关联

    第二种是唯一外键对应

            •在任何一方加一个外键,但是需要设置成唯一(unique),指向另一方的主键

    多表的查询

    笛卡尔积的概念:(了解)笛卡尔乘积是指在数学中,两个集合XY的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

    小贴士

    多表查询时,如果不指定表之间的连接条件,则连接变成笛卡尔乘积操作,笛卡尔积的效果如本页所示。

    进行笛卡尔积后,查询结果中存在大量无意义的数据,示例中只有A表中的A_IDB表中A_ID一致的行才有意义,这样我们通过加上WHERE过滤条件.

    得到想要的数据。这种横跨多表的查询操作一般用连接完成。

    表A 表B
    aid aname bid bname
    a1 aa1 b1 bb1
    a2 aa2 b2 bb2
                b3 bb3
    * 查询的语法
    select * from 表A,表B; 返回的结果就是笛卡尔积。
    结果:
    a1 aa1 b1 bb1
    a1 aa1 b2 bb2
    a1 aa1 b3 bb3
    a2 aa2 b1 bb1
    a2 aa2 b2 bb2
    a2 aa2 b3 bb3
    select * from dept,emp;

    多表查询

    内连接(用的比较多)

    * 普通内连接
            前提条件:需要有外键的。
            提交关键字 inner join ... on
                    select * from dept inner join emp on dept.did = emp.dno;
     隐式内连接(用的是最多的)
            可以不使用inner join ... on关键字
                    select * from dept,emp where dept.did = emp.dno;

    外连接

    * 左外链接(看左表,把左表所有的数据全部查询出来
             前提条件:需要有外键的。
             语法: 使用关键字 left [outer] join ... on
                  select * from dept left outer join emp on dept.did = emp.dno;
    * 右外链接(看右表,把右表所有的数据全部查询出来
            前提条件:需要有外键的。
            语法: 使用关键字 right [outer] join ... on

                  select * from dept right join emp on dept.did = emp.dno

    子查询

    *查询的内容需要另一个查询的结果。

    select * from emp where 条件 > (select * from emp where 条件);
    
    select * from emp where ename > (select * from emp where 条件);

    any 任意
    all 全部
    >any 大于结果的最小值

    >all 大于结果的最大值

    =============================================================================

    create table dept(
        did int primary key auto_increment,
        dname varchar(30)
    );
    create table emp(
        eid int primary key auto_increment,
        ename varchar(20),
        salaly double,
        dno int
    );

    查看所有人所属的部门名称和员工名称?

    select dept.dname,emp.ename from dept,emp where dept.did = emp.dno;
    select d.dname,e.ename from dept d,emp e where d.did = e.dno;

    统计每个部门的人数(按照部门名称统计,分组group by  count)

    select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname; ​​​​​​​

    统计每个部门的人数(按照部门名称统计)

    select d.did,d.dname,count(*) from dept d,emp e where d.did= e.dno group by d.did order by d.did asc;

    统计部门的平均工资(按部门名称统计 ,分组group by  avg)

    select d.dname,avg(salaly) from dept d,emp e where d.did = e.dno group by d.dname;

    统计部门的平均工资大于公司平均工资的部门(子查询)
    * 公司的平均工资

    select avg(salaly) from emp;

    * 部门的平均工资

    select d.dname,avg(e.salaly) as sa from dept d,emp e where d.did = e.dno group by d.dname having sa > (select avg(salaly) from emp);
    +-----+-------+--------+------+
    | eid | ename | salaly | dno  |
    +-----+-------+--------+------+
    |   1 | 班长  |  10000 |    1 |
    |   2 | 美美  |  10000 |    2 |
    |   3 | 小凤  |  10000 |    3 |
    |   4 | 如花  |  10000 |    2 |
    |   5 | 芙蓉  |  10000 |    1 |
    +-----+-------+--------+------+
    
    +-----+--------+
    | did | dname  |
    +-----+--------+
    |   1 | 研发部 |
    |   2 | 销售部 |
    |   3 | 人事部 |
    +-----+--------+
    ==============================================================================================
    +-----+-------+--------+------+
    | eid | ename | salaly | dno  |
    +-----+-------+--------+------+
    |   1 | 班长  |  10000 |    1 |
    |   2 | 美美  |  10000 |    2 |
    |   3 | 小凤  |  10000 |    3 |
    |   4 | 如花  |  10000 |    2 |
    |   5 | 芙蓉  |  10000 |    1 |
    |   6 | 东东  |    800 | NULL |
    |   7 | 波波  |   1000 | NULL |
    +-----+-------+--------+------+
    
    +-----+----------+
    | did | dname    |
    +-----+----------+
    |   1 | 研发部   |
    |   2 | 销售部   |
    |   3 | 人事部   |
    |   4 | 扯淡部   |
    |   5 | 牛宝宝部 |
    +-----+----------+

     

    展开全文
  • SQLserver 数据库update select from 语句

    万次阅读 2018-04-03 14:31:44
    UPDATE TJ_TJXMB n SET n.DJ = SELECT b.unit_price FROM his_system_cure_item_info b WHERE b.item_name = n.MC error错误 [Err] 42000 - [SQL Server]Incorrect syntax near 'n'. 正确的; ...

    错误的:

    UPDATE TJ_TJXMB n
    SET n.DJ = SELECT
        b.unit_price
    FROM
        his_system_cure_item_info b
    WHERE
        b.item_name = n.MC
    

    error错误

    [Err] 42000 - [SQL Server]Incorrect syntax near 'n'.

    正确的;

    UPDATE TJ_TJXMB 
    SET DJ = b.unit_price
    FROM
        his_system_cure_item_info b,TJ_TJXMB n
    WHERE
        b.item_name = n.MC
    展开全文
  • SQL数据库优化的六种方法

    千次阅读 2019-06-24 10:17:15
    SQL数据库优化的六种方法 SQL命令因为语法简单、操作高效受到了很多用户的欢迎。但是,SQL命令的效率受到不同的数据库功能的限制,特别是在计算时间方面,再加上语言的高效率也不意味着优化会更容易,所以每个...

     

    SQL数据库优化的六种方法

     

    SQL命令因为语法简单、操作高效受到了很多用户的欢迎。但是,SQL命令的效率受到不同的数据库功能的限制,特别是在计算时间方面,再加上语言的高效率也不意味着优化会更容易,所以每个数据库都需要依据实际情况做特殊调整。

    值得收藏!SQL数据库优化的六种方法

    同时,这也是为什么我们要尽可能多的了解不同的方法来优化或增强数据库,以确保最佳性能的原因。不同职位的开发人员针对SQL数据库的优化也会有所不同,例如在某些方面的优化就会与数据库管理员(DBA)有所不同。在大型公司中,开发人员和数据库管理员往往需要一起工作,而在这些情况下,两队之间很可能发生冲突。所有我们要通过多种方式来调整SQL数据库。

    1.适当的索引

    索引基本上是一个数据结构,有助于加快整个数据检索过程。唯一索引是一种索引,可以创建不重叠的数据列。正确的索引能够更快地访问数据库,但是过多的索引或无索引反而会造成不好的结果,如果没有索引,那么处理会非常慢。

    2.仅检索相关数据

    指定数据需要检索的精度。使用命令*和LIMIT来代替SELECT*,调整数据库时,使用需要的数据集来代替整个数据集是非常有必要的,尤其是当你的数据源非常大的时候,指定所需要用的数据集将节省大部分时间。

    *命令用于从列指定数据,LIMIT子句可以被用于强制SELECT语句返回指定的记录数。它们两的组合避免了未来系统出现问题,此外,数据集的限定也在一定程度上减少了对数据库的进一步优化。

    3.摆脱相关的子查询

    相关子查询基本上取决于父查询或外部查询。这种搜索是逐行完成的,这意味着它会降低整个过程的速度。通常如果WHERE来自于从外部查询的命令,应用子查询运行每一行,由父查询返回,从而减慢整个进程并降低数据库效率的话,更好的调整数据库的方式是INNERJOIN命令。当然在某些情况下,使用相关的子查询至关重要。

    4.根据要求使用或避免临时表

    如果代码可以以简单的方式写,绝对不要让临时表复杂化。当然,如果一个数据具有需要多次查询的具体程序,在这种情况下,建议使用临时表。临时表通常由子查询来交替。

    5.避免编码循环

    避免编码循环是非常需要的,因为它会拖慢整个序列。通过使用具有单个行的唯一UPDATE或INSERT命令来避免编码循环,并且通过WHERE命令确保不更新存储的数据,以便在找到匹配且预先存在的数据的情况下实现。

    6.执行计划

    优化器创建的执行计划工具在调优SQL数据库方面发挥主要作用。它们也有助于创建适当的索引。虽然它的主要功能是以图形方式显示检索数据的各种方法。但这反过来也有助于创建所需的索引并执行其他所需的步骤来优化数据库。

    当然除此之外还有许多其他方法可以以有效的方式来调整其SQL数据库。欢迎大家在下方积极留言评论,共同交流探讨。

    展开全文
  • SQL数据库学习,常用语句查询大全

    万次阅读 多人点赞 2016-02-13 21:09:05
    SQL数据库的大全解析,包括简单查询和多表查询
  • SQL Server UPDATE语句的用法详解

    千次阅读 2016-06-28 22:25:00
    SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server ...在SQL Server数据库中要想修改数据库记录,就需要用UPDATE语句,UPDATE语句就是为了改...
  • SQL数据库操作命令大全

    万次阅读 多人点赞 2017-11-16 16:05:50
    SQL数据库操作命令大全
  • 数据库 Update Statistics作用及用法

    千次阅读 2010-10-08 14:10:00
     为了提高数据库的效率,INFORMIX提供了一个基于成本的查询优化器, 执行update statistics语句的作用就是将您创建的数据库表的有关统计信息更新到系统sysmaster的相关表中(如systables、 syscolumns、...
  • 1.数据库update查询 update 表名称 set 字段名+where+字段名例如 posts表 id title author 1 foolish 猪八戒 2 stupid 孙悟空  update posts set title="clever" where author="...
  • SQL数据库超时的原因与解决方法

    万次阅读 2014-01-03 10:47:09
    如果SQL的数据库越来越多,有时候会... 1、由于数据库设计问题造成SQL数据库新增数据时超时  症状:  A、 Microsoft OLE DB Provider for SQL Server 错误 '80040e31' [ODBC SQL Server 
  • C++连接SQL数据库

    千次阅读 2011-09-28 16:08:32
    C++连接SQL数据库第一步 系统配置 1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。 2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录...
  • sql数据库修复技术

    千次阅读 2009-01-23 13:02:00
    sql数据库修复技术SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能...
  • 使用Delphi怎么连接SQL数据库

    千次阅读 2017-12-19 16:20:06
    使用Delphi如何连接SQL数据库? 最好能说的详细点 ------解决方案-------------------- 使用ADO连接SQL Server 2000数据库 1.用ADO组件TADOQuery连接数据库 用TADOQuery组件连接数据库需要以下几个步骤: (1)用...
  • 数据库 webSQL使用方法

    千次阅读 2017-08-09 19:06:19
    是一个可以操作数据库的字符串 类似正则的规则 他不会自己执行,需要各个平台单独操作数据库的函数 执行 这个sql语句 才能让sql执行在webSQL里面 有执行sql语句的方法 就会去执行sql里面描述的功能webSQLsql语句 ...
  • MFC连接SQL数据库操作

    万次阅读 2012-09-03 21:50:33
    要操作SQL数据库要经过以下几个步骤: 0.建立数据库 1.配置数据源 2.数据库的连接 3.数据库的操作 4.类资料 【1】配置数据源 配置数据源一般有两种方法一种是通过注册表,一种是通过SQLConfigDataSource函数...
  • sql恢复,sql数据库恢复

    千次阅读 2006-04-25 19:55:00
    数据库恢复/数据库修复是比较常见的一种数据恢复业务。...我们可以提供以下类型数据库的专业恢复和修复服务: Access (*.mdb) 数据库恢复/sql数据库恢复 MSSql (*.mdf) 数据库恢复/数据库修复 Paradox(*.D
  • 执行一般的sql更新语句为update table_name set column_name=value where column_name1=value1;但是我们有时候需要将某个表用的字段根据两个表中相关字段更新为另一个表中某个字段的数据,即a表中主键aid在b表中有个...
  • Spring-JDBC 操作SQL数据库

    千次阅读 2016-02-15 15:32:23
    Spring-JDBC 操作SQL数据库1.关于org.springframework.jdbcJava操作关系数据库,例如MySQL,可以使用数据库对应的JDBC驱动程序(如:mysql-connector-java)提供的的方法。但由于JDBC驱动提供的API使用起来每次都要...
  • sql数据库修复技术

    千次阅读 2005-12-19 13:41:00
    小知识: SQL恢复技术 sql数据库修复技术 SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份...
  • SQL数据库学习总结

    千次阅读 2016-01-13 09:51:38
    经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成;对于初学者首先要学的 经过一段时间的学习,也对数据库有了一些认识。... insert,update,delete T-sql 函数 存储
  • SQLServer update语句用法

    万次阅读 2010-08-08 14:54:00
    UPDATE是我们常SQL语句之一,update主要用于更改表中的现有数据. 更新一个表:update product set l_parentid ='1' 详细解说: update 表名 set 列名 =参数 更新两个表或多个表: update product ...
  • SQL数据库保存数据

    千次阅读 2016-04-14 09:52:40
    这类假定您熟悉SQL数据库,帮助您开始使用SQLite数据库在Android上。api需要使用数据库android.database在Android上可用。sqlite包。 定义一个模式和合同 SQL数据库的主要原则之一的模式:一个正式的数据库是如何...
  • 基于VB.Net的SQL数据库操作

    千次阅读 2018-07-23 18:01:30
    本人是根据自己的经历,将有基于VB.Net的数据库的操作整理如下,或许不是很完整,后面有... UpdateSQL(updatecmd)方法是执行updatecmd数据库语句,更新数据库; ExecuteSQLToArray(CommandText)函数是通过Sqlread...
  • SQL数据库问题RESTRICT

    2015-04-09 08:36:12
    FOREIGN KEY(C#) REFERENCES C(C#) ON DELETE RESTRICT 这个语句报了错误, 消息 156,级别 15,状态 1,第 7 行 关键字 'RESTRICT' 附近有语法错误。 找不出错误原因,哪个大神能帮我看一下?
  • 本文主要介绍的就是在HBuilder+MUI框架进行html5开发中websql数据库的操作方法,以具体实例说明如何通过JavaScript封装的html5操作websql数据库
  • SQL数据库语言总结及代码示例

    万次阅读 多人点赞 2016-05-02 05:55:49
    SQL 指结构化查询语言(Structured Query Language),SQL使我们有能力访问数据库SQL是一种 ANSI 的标准计算机语言。 SQL语言不区分大小写。 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)...
  • database/sql数据库驱动

    千次阅读 2018-05-18 14:22:43
    Go没有内置的驱动支持任何的数据库,而是定义了database/sql接口,要用户基于驱动接口开发相应数据库的驱动。GitHub上有许多基于database/sql接口开发的不同数据库驱动,基于Go提供的接口标准来开发的驱动的好处就是...
  • postgresql 数据库 update更新慢的原因(已解决)

    千次阅读 热门讨论 2021-01-27 09:40:24
    postgresql 数据库 update更新慢的原因(已解决) 文章目录postgresql 数据库 update更新慢的原因(已解决)1.查看语句是否有问题2.查找影响updata的因素查询锁3.查询参数4.收缩表 VACUUM5.总结 这几天 发现一条...
  • SQLupdateupdate select结合语法详解与实例

    万次阅读 多人点赞 2019-02-20 17:15:52
    本文主要介绍了通用的简单的update语句以及GreenPlum、MySQL、Oracle、SQLServer数据库update与select相结合的用法以及实例。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 355,760
精华内容 142,304
关键字:

sql数据库update用法