数据库学习---SQL基础(一)

时间:2022-11-03 18:11:16
SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言,不依赖与DBMS的存在而存在。
增删改查---------基础
insert into tablename(field1,field2) value(value1,value2);
insert into tablename(field1,field2) values(value1,value2);
insert into tablename(field1,field2) values(value1,value2),(value3,value4),(value5,value6);
delete from tablename where col1='删除指定列名称的一行数据'
update tablename set 列名称=新值 where 列名称=某值
select * from tablename where 列名称=某值
 note:
delete或update操作时如
delete from person where id in(select min(id) from person)
会报错。提示:You can't specify target table 'sql_test' for delete in FROM clause 你不能为from指定的目标表进行delete操作
猜想:难道是因为更新或删除操作时表已经被锁定了不能在进行查询操作?不知道。
解决方法:在外部嵌套一个select查询
delete from person where id in(select * from (select min(id) from person))
返回行 不重复 distinct 用于返回唯一不用的值
select distinct 列名称 from 表名称
 
 
条件匹配
 
 
where语句对应关系代数中的选择运算符(σ, selection),表示选出满足一定条件的行。
select 列名称 from 表名称 where 列 运算符 值
select sno from sc where grade>80;找出课程成绩大于80分的学生的学号
运算符:
 
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
操作符 <> 可以写为 !=
 
AND和OR运算符(双目运算符)
逻辑运算符,用于条件结合。
 
ORDER BY 对结果集进行排序
根据指定的列对结果集进行排序,默认按照升序排序。
 
top子句
用于规定要返回的记录的数目。
mysql语法
select column_name(s) from table_name LIMIT number
如:select * from persons LIMIT 5
oracle语法
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
SELECT * FROM Persons WHERE ROWNUM <= 5
 
like操作符
select * from persons where name like '张%'在persons表中找到姓名为张开头的记录
%可用于定义通配符
通配符:
% 替代一个或多个字符
_仅替代一个字符
 

[charlist] 字符列表中的任何单一字符

[^charlist]或者[!charlist]:不在字符列中的任何单一字符
select * from persons where city like '[ALN]%'选取居住的城市以"A",或"L",或"N"开头的表中的记录。
 
IN操作符
返回与in中值相同的字段的记录。
in操作符允许我们在where子句中规定多个值。
select cloumn_name(s) from table_name where cloumn in(value1,value2,value3)
查找姓氏为张和李的人的名字
select * from person where name in(select name from person where name like '[张李]%')

BETWEEN 操作符

操作符 BETWEEN ... AND(在什么之间) 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期

查找年龄在15到20岁的人的记录where age between 15 and 20

between and也可以转化为:age>=15 and age<=20但不同数据库转化可能不同。可以是age>=15 and age<20或者是age>15 and age<20

ps:效率问题

查询数值建议使用>=,<=。查询文本建议使用between and 。不同数据库对选取值是否包含15和20不确定。用之前先测试

Alias别名

为列名称或表名称指定别名select * from table_name as alias_name

为很复杂的表名设置别名方便后面的条件查找。(就是为了查看和书写方便)

SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'

表连接

现有三个表分别时student,sc,course
数据库学习---SQL基础(一)
表连接的方式有
join 用笛卡儿积乘积两个表如果表persons有n行表order有m行则两表连接后有n*m行
select * from student,course;
将上面student表和course表进行join连接后总行数是2x2=4行
结果是
数据库学习---SQL基础(一)
 
inner join内连接也叫等值连接制定两表中字段是否相等,相等则连接记录。生成行数较少。
 查询有课程的学生信息及各个课程的分数
select  name,grade from student inner join sc on student.ID=sc.sID

查询过程:先将student表和sc表内联接关键字段为student.ID=sc.sID 连接后的表:

数据库学习---SQL基础(一)

然后直接从表中查找name和grade。

 left join左连接。如果右表中有关键字与左表中关键字匹配的值则将这条记录与左表的记录连接

如果左表中某一行没有与右表的数据匹配则返回改行数据,其余列置为空。

先给student表增加一个记录insert into student values(3,王五,17)

然后我们所有学生信息及各个课程的分数

select * from student left join sc on student.ID=sc.ID

左连接的结果。看下图左连接

数据库学习---SQL基础(一)

以左表为基础进行匹配,成功则连接,不成功如id为3的记录,右表中没有id(student)为3的记录。返回连接后数据如图(student表中的行信息写入,sc表中数据置为空。)

与inner join的区别:inner join只会返回关键字相等的行连接记录,left join 会返回左表的所有记录。

right join右连接与左连接相反,会返回右表所有行。修改上面sql语句

select * from sc right join student on student.ID=sc.ID

数据库学习---SQL基础(一)

full join全连接会返回左右表中所有行,即使左右表中没有与之匹配的记录。或者说是left join和right join的互补。

我们给sc表增加记录insert into sc values(66,55,99)

变化后表数据为

数据库学习---SQL基础(一)

查询所有的人的信息及其课程信息和分数

select  * from student full join sc on student.ID=sc.ID

数据库学习---SQL基础(一)

参考资料:

MySQL中嵌套子查询删除出错解决方案

https://zhidao.baidu.com/question/682189710270390092.html

数据库学习---SQL基础(一)的更多相关文章

  1. 数据库学习---SQL基础&lpar;二&rpar;

    数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) 上篇复习的sql的增删改查,and ,or ,>=, <=,!=等逻辑运算符,还有in ...

  2. 数据库语言——SQL——基础部分——初篇

    概述 SQL全称为Structured Query Language,是关系型数据库的语言标准,它并不与特定的数据库商品类型有关,例如Mysql,Oracle,DB2等等都可以使用SQL语言,它与特定 ...

  3. 学习sql基础注入的方法

    作为一个初学者的我,经学习发现基础真的十分重要, 这个随笔是写给我自己的希望我能坚持住 当然,我也希望对其他人有点帮助 在sql注入的过程中,我越发感觉那些基础函数的重要性 其实我感觉sql注入其实就 ...

  4. Oracle数据库之SQL基础和分支循环

    一.SQL基础语言 DECLARE --声明 a ); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbm ...

  5. iOS数据库学习&lpar;2&rpar;-基础SQL语句

    /* 1. 创建一个数据表 */ CREATE TABLE IF NOT EXISTS t_dog (name text, age integer); CREATE TABLE IF NOT EXIS ...

  6. 聊聊数据库~3&period;SQL基础篇

    上篇回顾:聊聊数据库~SQL环境篇 扩展:为用户添加新数据库的权限 PS:先使用root创建数据库,然后再授权grant all privileges on 数据库.* to 用户名@"%& ...

  7. Oracle数据库之SQL基础(二)

    一.约束 ❤ 1.约束概述 约束作用: (1)定义规则 (2)确保完整性:包括数据的精确性.可靠性.以确保数据不会出错,或者尽量减少出错. 约束的类型: (1)非空约束 (2)主键约束 (3)外键约束 ...

  8. Oracle数据库之SQL基础(一)

    主要内容:用户与表空间:表与约束:查询语句. 一.概述 Oracle安装:访问官网,下载 二.用户与表空间 在安装Oracle时在开始菜单里可以用sql puls登录oracle. ★1.系统用户 s ...

  9. python--11、数据库及SQL基础

    常用命令记录 查看库中所有表的引擎 SHOW TABLE STATUS FROM `center_main_db`; 还有一个更简洁,查询cmol_system_db库所有表的存储引擎\ SELECT ...

随机推荐

  1. sqlHelper做增删改查&comma;SQL注入处理,存储值,cookie,session

    一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ...

  2. JAVA package-info文件【转】

    翻看以前的笔记,看到一个特殊的java文件:pacakge-info.java,虽然有记录,但是不全,就尝试着追踪一下该问题, 分享一下流水账式的结果. 首先,它不能随便被创建.在Eclipse中, ...

  3. 使用swiper和吸顶效果代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. RequireJS示例

    建议项目结构: HTML文件结构: <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  5. 分享一些前端chm文档

    分享地址:http://yun.baidu.com/share/link?shareid=39230983&uk=1008683945 对于网络不好的人来说,离线文档更加方便.打开速度更快. ...

  6. Dynamics CRM 2015 站点地图公告配置实体显示名称的变更

    CRM更新2015后,在设置里找不到公告配置了 在原来的位置上你会东西一个叫活动源配置的东西,点开看后就是原来的公告配置.

  7. ES6中6种声明变量的方法

    相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...

  8. BULK语句 将TXT数据塞入数据库表格

    SET @iSQL=N'BULK INSERT [TEST].[dbo].[TEST_Interim]'+' FROM '+quotename(@fullFileName,'''')+' WITH ( ...

  9. spring mvc中获取请求URL

    String baseUrl=request.getScheme()+"://"+request.getServerName()+":"+request.get ...

  10. 如何在数据表中存取图片 - 回复 &quot&semi;三足乌&quot&semi; 的问题

    问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853 准备工作:1.在空白窗体上添加: ClientData ...