My SQL学习笔记
sql必知必会读书笔记
sql必知必会读书笔记《SQL必知必会》是一本非常实用的SQL学习书籍,以下是我的读书笔记:1. SQL是什么?SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言。
它可以用于创建、修改和删除数据表,以及查询、更新和删除数据。
2. SQL的基本语法SQL语句以分号结尾。
常用的SQL语句包括SELECT、INSERT、UPDATE、DELETE等。
其中,SELECT语句用于查询数据,INSERT语句用于插入数据,UPDATE语句用于更新数据,DELETE语句用于删除数据。
3. SELECT语句的基本结构SELECT语句的基本结构为:SELECT 列名FROM 表名WHERE 条件表达式。
其中,列名表示要查询的数据,表名表示要查询的表,条件表达式表示查询的条件。
4. WHERE子句WHERE子句用于指定查询条件,可以使用比较运算符(如=、<>、>、<、>=、<=)和逻辑运算符(如AND、OR、NOT)进行组合。
例如,查询年龄大于18岁的员工信息:SELECT * FROM employees WHERE age > 18;5. ORDER BY子句ORDER BY子句用于对查询结果进行排序,可以按照一个或多个列进行排序。
默认情况下,排序方式为升序(ASC),也可以使用DESC关键字进行降序排序。
例如,按照员工姓名升序排列:SELECT * FROM employees ORDER BY name ASC;6. GROUP BY子句GROUP BY子句用于将查询结果按照一个或多个列进行分组。
可以使用聚合函数(如COUNT、SUM、AVG、MAX、MIN)对每个分组进行计算。
例如,统计每个部门的平均工资:SELECT department, AVG(salary) FROM employees GROUP BY department;7. HAVING子句HAVING子句用于对分组后的结果进行筛选。
SQL语法大全(个人笔记)
Sql指令✓Select Store_Name From Store_Information✓Select Distinct Store_Name From Store_Information ✓Select Store_NameFrom Store_InformationWhere Sales > 1000✓Select Store_NameFrom Store_InformationWhere Sales > 1000Or (Sales < 500 And Sales > 275)✓Select *From Store_InformationWhere Store_Name In ('Los Angeles', 'San Diego')✓Select *From Store_InformationWhere Date Between 'Jan-06-1999' And 'Jan-10-1999' ✓Sql 中有两个通配符:% (百分比符号):代表零个、一个、或数个字母。
_ (底线):代表刚好一个字母。
通配符是与 Like 关键词一起使用的✓Select *From Store_InformationWhere Store_Name Like '%An%'✓Select Store_Name, Sales, DateFrom Store_InformationOrder By Sales Desc✓Avg (平均) Select Avg(Sales) From Store_Information ✓Count (计数) :Select Count(Store_Name)From Store_InformationWhere Store_Name Is Not NullSelect Count(Distinct Store_Name)From Store_Information✓Max (最大值)Select Max(Sales) From Store_Information✓Min (最小值)Select Min(Sales) From Store_Information✓Sum (总合)Select Sum(Sales) From Store_Information✓Select Store_Name, Sum(Sales)From Store_InformationGroup By Store_Name✓Select Store_Name, Sum(Sales)From Store_InformationGroup By Store_NameHaving Sum(Sales) > 1500✓别名:Select A1.Store_Name Store, Sum(A1.Sales) "Total Sales"From Store_Information A1Group By A1.Store_Name✓As :Select A1.Store_Name Store, Sum(A1.Sales) As "Total Sales"From Store_Information As A1Group By A1.Store_Name✓连接:Select Region_Name + ' ' + Store_Name From GeographyWhere Store_Name = 'Boston'✓Substr(Str,Pos,Len): 由<Str>中的第<Pos>位置开始,选出接下去的<Len>个字符。
MySQL必知必会笔记
MySQL必知必会笔记(一)基础知识和基本操作第一章了解MySQL数据库保存有组织的数据的容器。
(通常是一个文件或一组文件)人们经常使用数据库这个术语代替他们使用的软件。
这是不正确的,确切的说,数据库软件应称为DBMS(数据库管理系统),数据库是通过DBMS创建和操纵的容器。
漱口可以是保存在硬件设备上的文件,但也可以不是。
你使用DBMS来代替自己访问数据库。
表表是一种结构化的文件可用来存储某种特定的类型的数据。
某种特定类型数据的结构化清单。
模式关于数据库和标的布局及特性的信息列表中的一个字段。
表由列组成。
列中存储着表里某部分的信息。
数据类型所容许的数据的类型。
每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
行表中的一个记录主键一列(或一组列),其值能够唯一区分表中的每个行。
虽然不是必须的,但是一般都建立主键。
便于以后的数据管理表中任何列都可以作为主键,只要满足以下条件:1 任意两行都不具有相同的主键值。
2 每个行都必须有一主键值(主键值不允许为NULL)主键的最好习惯:不更新主键列的值不重用主键列的值不在主键列中使用可能会更改的值什么是sqlSql是结构化查询语言的缩写。
Sql是一种专门用类与数据库通信的语言。
第二章 MySQL简介什么是Mysql Mysql是一种DBMS,即它是一种数据库软件。
Mysql版本主要更改4-——InnoDB引擎,增加了事务处理、并、改进全文搜索等支持4.1——对函数库、子查询、集成帮助等的重要增加、5——存储过程、触发器、游标、试图等。
第三章使用mysql连接主机名端口一个合法用户用户口令Mysql -u root -p -h myserver -P 9999选择数据库可使用USE关键字,mysql语言组成部分的一个关键字,绝不要使用关键字命名一个表或列USE dataname;显示数据库列表SHOW DATABASES;一个数据库内的表的列表(USE进入数据库的情况下)SHOW TABLES;SHOW也可以用来显示表列SHOW COLUMNS FROM column;DESCRIBE 是SHOW COLUMNS的一种快捷方式;DESCRIBE cust;其他的SHOW语句SHOW STATUS 显示广泛的服务器状态信息SHOW CREATE DATABASE 显示创建特定数据库的MYSQL语句SHOW CREATE TABLE 显示创建特定表的MYSQL语句SHOW GRANTS 显示授权用户的安全权限SHOW ERRORS 显示服务器的错误信息SHOW WARNINGS 显示服务器的警告信息MySQL必知必会笔记(二)SELECT语句检索排序过滤通配符搜索正则表达式搜索第四章检索数据检索单列SELECT columnOne FROM table;检索多列SELECT columnOne,columnTwo,columnThire FORM table;检索所有列SELECT * FROM products; //一般,除非你确实需要表中的每个列,否则最好不要用*通配符检索不同的行检索出来的数据不重复DISTINCT关键字,顾名思义返回不同的值SELECT DISTINCT columnOne FROM table; //检索出来的columnOne 没有重复值DISTINCT关键字应用于所有列而不仅是前置它的列SELECT DISTINCT vend_id,prod_price......要求vend_id,prod_price这两列都不出现重复的值限制结果条数sql语句后面加入下面sql语句LIMIT 5 显示结果的前5条LIMIT 3,4从行3开始的后4行LIMIT 4 OFFSET 3 从行3开始的后4行第五章排序检索数据子句 Sql语句是由子句构成,有些子句是必须的,有些事可选的。
MySQL学习笔记
My SQL学习笔记:一、认识关系型数据库1.数据库实际上就是管理数据的仓库,平常我们使用的一般是利用文件对数据进行保存和管理,doc, xls, jpg等等,只要我们知道的一切能够保存数据的文件,我们都可以认为是一种保存和管理数据的方式。
2.但是对于大批量数据和便于网络操作而言,使用特定的数据库是很有必要的。
3.数据库系统(D atabase Sy stem)=数据(D ata)+数据管理系统(Database Managemen tSystem)4.通常意义的数据库:至少包含数据和管理数据的工具,我们知道,数据库还需要对外提供接口让其他程序对数据库进行操作。
二、启动My SQL1.启动数据库分为两部分,一部分是服务器,第二部分是客户端连接到服务器。
2.启动服务器:在Win dows上安装MySQL后会在Wind ows服务管理中增加一条记录,可以通过启动services.msc找到MySQL56进行启动。
也可以使用net star t <server-name>。
三、MySQL操作分类:针对的操作对象不同,分成不同的语言:1.数据操作(管理)语言DM L2.数据定义语言(对保存数据的格式进行定义)DDL3.数据库控制语言(针对数据库软件服务进行操作)DC LDCL控制DDL,DDL限制DML,即对数据库的操作、对表的操作、对数据的操作DML又分为DQ L和DML四、数据库操作DCL1.创建数据库:create da tabase <db_name> [op tions]; (o ptions:字符集、校对规则)2.查询数据库:show da tabases;3.查看数据库的创建语句:show creat e database <db_name>;4.删除数据库:dr op databas e <db_name>;5.修改数据库信息:alter dat abase <db_name><opti ons>;(opti ons:字符集、校对规则),对于数据库的名字,一般不进行修改,可以通过修改数据库文件夹的名字进行修改,也可以新建一个数据库,将数据库内容保存新数据库中五、表操作1.创建表:create table <tb_name>(<co l_definiti on>,…) *op tions];1)先分析,需要保存的实体数据,拥有哪些属性,需要怎样保存2)列结构:列名、列的数据类型、列的约束2.查看表:1)有那些表:show tables [l ike ‘patte rn’+;例如sho w tables l ike ‘city_%’;(表示已cit y_开头的所有表)2)某个表的创建信息:s how create table <tb_name>;3)查看表结构:desc(d escribe) <tb_name>;3.删除表:droptable [ifexists]<tb_name>;4.修改表:1)修改表名:re name table<tb_name>t o <new_tb_name>;ren ame tablestudent to info_stud ent, teach er to info_teacher;2)修改字段(列)定义:对列的操作都属于a lter操作,不过对于增、删、改、重命名来说还有子操作。
mysql学习笔记(一)之mysqlparameter
mysql学习笔记(⼀)之mysqlparameter基础琐碎总结-----参数化查询参数化查询(Parameterized Query )是指在设计与数据库链接并访问数据时,在需要填⼊数值或数据的地⽅,使⽤参数 (Parameter) 来给值,这个⽅法⽬前已被视为最有效可预防SQL注⼊攻击 (SQL Injection) 的攻击⼿法的防御⽅式。
下⾯将重点总结下Parameter构建的⼏种常⽤⽅法。
说起参数化查询当然最主要的就是如何构造所谓的参数:⽐如,我们登陆时需要密码和⽤户名,⼀般我们会这样写sql语句,Select * from Login where username= @Username and password = @Password,为了防⽌sql注⼊,我们该如何构建@Username和@Password两个参数呢,下⾯提供六种(其实⼤部分原理都是⼀样,只不过代码表现形式不⼀样,以此仅作对⽐,⽅便使⽤)构建参数的⽅法,根据不同的情况选⽤合适的⽅法即可:说明:以下loginId和loginPwd是户登陆时输⼊登陆⽤户名和密码,DB.conn是数据库连接,⽤时引⼊using System.Data.SqlClient命名空间⽅法⼀:SqlCommand command = new SqlCommand(sqlStr, DB.conn);command.Parameters.Add("@Username", SqlDbType.VarChar);command.Parameters.Add("@Pasword", SqlDbType.VarChar);command.Parameters["@Username"].Value = loginId;command.Parameters["@Pasword"].Value = loginPwd;⽅法⼆:SqlCommand command = new SqlCommand();command.Connection = DB.conn;mandText = sqlStr;command.Parameters.Add(new SqlParameter("@Username", loginId));command.Parameters.Add(new SqlParameter("@Pasword", loginPwd));⽅法三:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);cmd.parameters.add("@Username",DbType.varchar).value=loginId;cmd.parameters.add("@Pasword",DbType.varchar).value=loginPwd;⽅法四:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);cmd.parameters.addwithvalue("@Username",loginId);cmd.parameters.addwithvalue("@Pasword",loginPwd);⽅法五:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);SqlParameter para1=new SqlParameter("@Username",SqlDbType.VarChar,16);para1.Value=loginId;cmd.Parameters.Add(para1);SqlParameter para2=new SqlParameter("@Pasword",SqlDbType.VarChar,16);para2.Value=loginPwd;cmd.Parameters.Add(para2);⽅法六:SqlParameter[] parms = new SqlParameter[]{new SqlParameter("@Username", SqlDbType.NVarChar,20),new SqlParameter("@Pasword", SqlDbType.NVarChar,20),};SqlCommand cmd = new SqlCommand(sqlStr, DB.conn);// 依次给参数赋值parms[0].Value = loginId;parms[1].Value = loginPwd;//将参数添加到SqlCommand命令中foreach (SqlParameter parm in parms){cmd.Parameters.Add(parm);}法和实现⽅法的不同,也可以说是语法糖,但后记:鉴于园友对dedeyi,⿁⽕飘荡,guihwu的疑问,我在写⼀个说明。
MySQL高级教程笔记
M y S Q L高级教程笔记集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]MySQL-高级MySQL中的SQL编程的话题.触发器, 存储函数, 存储过程以上的是三个名词, 在SQL编程中, 地位是: 程序的载体, 程序的结果.编程所涉及的要素:变量, 数据类型, 流程控制, 函数, 运算符, 表达式.2.1内置函数MySQL自动提供的函数!例如: database(), now(), md5()2.2自定义函数–存储函数用户定义定义的, 存储在MySQL中的函数. 2.2.1create function, 创建函数适用语法:来创建函数2.2.2调用函数2.2.3drop function , 删除函数drop function [if exists] function-name;3变量–编程要素程序处理数据.数据在程序中的容器, 就是变量.强类型3.1全局变量函数外定义的变量变量不需要声明, 直接去设置即可!PS, 内置的变量: set autocommit = off, 不以 @开头3.2局部变量函数内定义的变量使用declare来声明.不需要使用@, 表示是用户自定义变量.强类型, 定义的局部变量, 必须定义为某种类型, 类型的表述与字段的类型一致!3.3重叠(嵌套)作用域局部内, 可访问到全局变量PS: 与JS保持一致13.4变量的赋值3.4.1set 变量 = 值3.4.2select into 变量当需要为变量赋值的数据, 来源于SQL中select语句的查询结果时, 可以使用select into完成变量的赋值.一次性, 赋值多个变量:函数内, 也可以使用4流程控制–编程要素循环和分支4.1分支- IF测试结果4.1.1内置分支函数: if()不是分支, 是典型的三元运算, 的函数封装语法MySQL不支持三元运算符 :.4.2分支-CASE测试结果4.3循环– while条件满足, 则循环继续其中标签, 用于在循环终止时, 一次性的终止多层循环! 类似于JS的语法.例如:4.4循环–终止终止当前循环:(continue), iterate终止全部:(break), leave终止, 都需要配合循环语句的标签使用! ierate:leave:如果需要终止多层:需要在后边跟随不同的标签即可5过程–存储过程– procedure与函数类似, 都是一段功能代码的集合, 称之为过程.与函数不一样的是, 函数由于完成某个特定的操作点, 例如, md5(), 获取md5摘要信息, 不是用来实现某中也无路基操作, 而是就是实现特定的操作. 过程是, 某个特定的业务逻辑.当我们需要使用SQL完成某件事时候, 使用过程, 而在过程的完成中, 需要一些特殊的操作, 就是函数.例如:需要插入, 1000条记录到某测试表中, 此时就应该创建过程.而在插入的时候, 需要随机的获取学生的姓名, 就可以定义一个函数, 完成获取随机的学生姓名工作.映射到PHP程序:浏览器所请求的一个URL, 对应的PHP代码, 就是一段过程. (例如, 商品添加, 用户注册), 就是过程.而在完成这个过程中, 需要将用户的密码做md5处理, md5就是函数.因此, 函数在意的是处理结果,函数具有返回值.而过程是一段执行, 不具有返回值.语法5.1创建过程: create procedure注意: 没有返回值参数有输入方式之分.过程内的写法, 与函数是一致的.5.2调用过程, call 过程()过程的调用不能出现在表达式中, 需要使用独立的语法进行独立调用.in: 由外向内传递out: 由内向外传递inout: 双向传递, 即可内向外, 也可外向内内, 外, 指的是, 过程外和过程内.创建过程外的三个变量:以三个变量作为实参, 调用过程:在获取过程外三个变量的值:inout 双向传递, 类似于 PHP中的引用传递!由于过程没有返回值, 需要在过程处理后, 得到过程的处理结果数据, 就因该, 使用带有out类型的参数.一个数据时被多个过程连续处理, 典型的需要 inout类型的参数.6练习一个纯粹的MySQL管理员需要完成某些操作, 需要使用过程, MySQL自带的编程方式.例如, 需要创建大量的测试数据, 可以过程完成:确定测试表的结构确定需要插入的数据格式要求:学号要从1开始递增.班级ID, 从1-100 随机姓名, 随机得来说明: 任意编程实现:编写, 需要的函数:获取班级ID生成名字:生成信息生成学号从1开始递增it-0000001it-0000002取得已有的最大学号.调用过程即可:测试数据7触发器– trigger事件驱动程序: 监听元素某些事件, 当事件被触发时, 事件处理器被调用. (PS: 类似于JS的事件驱动)触发器的事件:insert, delete, update扩展开共六种:before insert, after insertbefore delete, after deletebefore update, after update事件都是记录对象的事件, row的before insert, row after insert.语法7.1创建触发器, create trigger绑定事件处理器, 到 row 元素上.测试, 在学生表的添加事件上增加触发器程序:一旦学生表添加, 则在学生日志表中, 加入一条记录检测学生日志表:触发程序被自动调用触发器, 只是调用方式不同于存储过程而已, 都是功能的集合.7.2删除触发器drop trigger tigger-name7.3new, old预定义的变量, 表示触发该事件的行对象.就是事件源记录.使用 new, old 来引用这个事件源记录.new 和 old的区别:new, 新纪录old, 旧记录.只有在update事件时, 才会出现新旧记录同时存在的情况.更新: 将旧记录更改成新纪录.在 insert事件中, 只有new可用. before insert, after insert , 都可以使用new.在delete事件中, 只有 old可用. before delete after delete 都可以使用 old 无论是 before还是insert 都一样.7.4事件的触发可能会出现执行一条语句 , 触发多个事件的情况.有些语句, 带有逻辑判定功能:replace into, 尝试插入, 如果冲突, 则替换(删除旧的,插入新的)类似的:insert into on duplicate key update冲突时更新一个表, 的一个事件, 仅仅可以绑定一个事件处理器.一个表最多可以有6个触发器.8架构读写分离, 负载均衡.8.1读, 写服务器分离设计:, MySQL 充当写服务器.再添加2台linux 充当读服务器:初始化mac地址完全复制复制后, 启动复制的服务器:删除, 之前所保留的虚拟化网卡的文件, 使新生成的网卡生效.修改 eth0的配置文件:修改mac地址参数:修改为, virtualbox生成的mac地址:保持一致init 6 重启8.2读从写服务器复制数据在主服务器上开一个复制账号, 从服务器利用这个复制账号, 从主服务器进行复制.配置过程如下:8.2.1主服务器8.2.1.1开启二进制日志8.2.1.2指定唯一的服务器ID保证唯一即可!需要重启 mysqld(可以与步骤一一起完成)8.2.1.3增加复制账号登录主MySQL, 增加账号, 刷新权限.8.2.1.4记录当前状态位置show master status8.2.2从服务器8.2.2.1指定服务器的唯一IDmysqld 重启8.2.2.2开启复制从服务器的MySQL中执行:使用 change master 来指定;此时已经建立的主从复制联系8.2.2.3开启复制在从服务器上执行:start slave8.2.2.4查看复制状态。
SQL笔记
SQL语言学习笔记作者:任孔宏Email:sunshine.rkh_accp@QQ:237634348第一节库操作及基本查询 (2)第二节表操作及约束 (3)第三节多表查询及聚合函数 (4)第四节多维数据集及计算列 (6)第五节批处理及case表达式 (8)第六节交叉报表及事务 (11)第七节 SQL安全性 (12)第八节高级查询 (14)第九节索引 (16)第十节视图 (17)第十一节游标 (20)第十二节存储过程 (24)第十三节触发器 (26)附录 SQL记忆内容汇总 (29)系统存储过程 (30)第一节库操作及基本查询/*SQL数据库管理*/create table emp(eid int,ename varchar(10),sal money)/*不可给自动增加列赋值*//*列名列表要和值列表匹配*//*字符类型与日期类型加单引号*/insert into emp(sal,ename,eid) values(1234,'rose',1001)/*删除表中数据*/1。
drop table emp--最为彻底2。
truncate table emp--不带日志,效率较高/*此两种方法不能被外键引用,不可带条件删除*/3。
delete from emp where .../*不能删除被引用的数据*//*表重命名*/sp_rename 'emp','newemp'/*列重命名*/sp_rename 'newemp.eid','neweid','COLUMN'/*复制表结构(带数据)*/select * into emp from newemp--自增与NOT NULL可复制,其他约束不可/*复制表结构(不带数据)*/select * into emp from newemp where 1>2/*复制部分列*/select clo1,col2,col3 into emp from newemp/*上三种中emp为select自动创建新表*//*查询指定表约束*/sp_helpconstraint emp/*执行指定的SQL指令*/sp_executesql N'select * from emp'/*N表示后面的字符串采用unicode编码体系(无论中英文均一字符双字节)*/ /*模糊查询like*/select * from emp where eid not like '[0-8][0-8][0-12]'/*中括号内代表‘一’位字符的范围,[0-12]即[0-1]||[0-2]*/select * from emp where ename like 'w_'/*"_"通配符,代表所有字符,就是麻将里的“混”*/select * from emp where ename like 'w%'/*"%"代表任意位的任意字符*/select * from emp where not ename='we'/*not不等于*/select * from emp where ename is null/*is null不是=null!*/select * from emp where ename is not null/*is not null不是not is null*/select * from emp where eid not in (2002)/*in 包含于*/select * from emp where eid between 1001 and 1002/*between 在两值之间的范围内取值*/第二节表操作及约束/*表操作*//*创建表*/create table emp(eid int primary key,--主键ename sql_variant, --通用数据类型flag timestamp --时间戳)/*插入列*/alter table emp add esex varchar(10) default 'nan'/*插入数据*/insert into emp(eid,ename) values(1004,'accp')insert into emp(eid,ename) values(1005,getdate())insert into emp(eid,ename) values(1006,3.1415926)/*更新数据*/update emp set ename='app' where eid=1004/*约束*/create table emp(eid int constraint pk_eid primary key,--主键约束ename varchar(10),sal numeric(7,2) constraint ck_sal check (sal>0),--检查约束selfid varchar(18) constraint uq_id unique, --唯一约束idate datetime constraint def_data default getdate()--默认约束)sp_pkeys emp--查看主键sp_help emp--查看约束alter table emp drop CK__emp__sal__78B3EFCA--删除约束alter table emp add constraint pk_id primary key(eid)--增加约束/*外键操作*/create table dept--主表(did int primary key,dname varchar(10),)create table emp(eid int primary key,ename varchar(10),dno int constraint fk_did foreign key references dept(did) on update cascade/*on delete no action 无级连更新,删除时外键冲突报错并回滚delete*//*on update no action 无级连更新,更新时外键冲突报错并回滚update*//*on delete cascade 删除时允许级连更新*//*on update cascade 更新时允许级连更新*/)alter table emp add constraint fk_did foreign key (dno) references dept(did)--增加外键第三节多表查询及聚合函数/*查询实例*/create table com(cid int primary key,cname varchar(10),ctel varchar(20))--公司表create table dept(did int primary key,dname varchar(10),dtel varchar(20),cno int references com(cid))--部门表create table emp(eid int primary key,ename varchar(10),etel varchar(10),dno int references dept(did)) --员工表/*插入数据*/insert into com select 1001,'sun','120'union select 1002,'IBM','130'union select 1003,'top','140'union select 1004,'MS','150'--union 集合运算符,批量操作insert into dept select 2001,'财务部','110',1001union select 2002,'行政部','120',1001union select 2003,'组织部','130',1001union select 2004,'人事部','140',1001insert into emp select 3001,'rose','110',2001union select 3002,'jack','120',2002union select 3003,'tom','130',2003union select 3004,'mike','140',2004union select 3005,'wilin','150',2002/*多表连接查询*/select * from dept left outer join emp on emp.dno=dept.did--左外连接,左表的所有数据以及右表的匹配数据,不匹配显示NULLselect * from emp left outer join dept on emp.dno=dept.did left outer join com on o=com.cid--多表左连接/*右连接*/select * from com right outer join dept on com.cid=o--右表中的所有数据,左表中的匹配数据,左表中不能和右表匹配的数据‘不显示’,--右表中的数据如果在左表中找不到匹配数据,会在对应左表位置显示为NULL/*内连接*/create table employee(eid int primary key,ename varchar(10),reportto int references employee(eid))insert into employee select 1001,'rose',nullunion select 1002,'will',1001union select 1003,'yao',1001union select 1004,'gigi',1002select * from employee e inner join employee m on m.eid=e.reportto --显示员工与其直接上级的对应关系/*聚合函数*/create table goods(gid int,gname varchar(10),price money)insert into goods select 1002,'accp',3456union select 1002,'bccp',56union select 1003,'cccp',456/*错误事例*/select gid ,avg(price) as avgp from goods/*正确事例*/select gid ,avg(price) as avgp from goods group by gid--单行与聚合不能一起使用,除非一句单行进行分组/*错误事例*/select * from goods where price=max(price)/*正确事例*/select * from goods where price=(select max(price) from goods)--聚合函数不能出现在where指令中第四节多维数据集及计算列create table inventory(item varchar(10),color varchar(10),quantity int--库存表)insert into inventory select 'table','blue',124union select 'table','red',223union select 'table','red',211union select 'chair','blue',101union select 'chair','red',210/*group by,order by*/select item,color,sum(quantity) as qu from inventory group by item,color order by it em desc--只有item和color相同的行才能分在一个组中/*with CUBE*/select item,color,sum(quantity) as qu from inventory group by item,color with CUBE order by item desc--CUBE 运算符生成的结果集是多维数据集。
SQL语言学习的自我总结
SQL语言学习的自我总结
学习SQL语言的过程中我收获了很多知识和技能,以下是我学习SQL的自我总结:
1. 掌握了SQL语言的基本语法和常用命令,包括SELECT、INSERT、UPDATE、DELETE等,能够使用这些命令来对数据库进行操作。
2. 理解了数据库的基本概念,包括表、字段、主键、外键等,能够设计和管理简单的数据库结构。
3. 学会了使用SQL语句查询数据库中的数据,包括基本的查询、条件查询、多表联合查询等。
4. 掌握了SQL语句的高级用法,包括聚合函数、分组、排序、子查询等,能够处理复杂的数据查询需求。
5. 学会了使用SQL语句进行数据的增删改查操作,能够对数据库中的数据进行灵活的管理。
6. 熟悉了SQL语言的优化技巧,能够提高查询效率和性能。
7. 通过练习和实践,加深了对SQL语言的理解和掌握,能够灵活应用SQL解决实际的数据处理问题。
8. 意识到SQL语言在数据处理和管理中的重要性,为今后的数据工作打下了良好的基础。
SQL 必知必会笔记整理
SQL 必知必会笔记整理目录SQL 必知必会笔记整理 (1)<1>了解SQL (2)<2>检索和排序数据 (3)<3>过滤数据 (5)<4>使用通配符过滤数据 (7)<5>创建计算字段 (8)<6>使用数据处理函数 (9)<7>汇总数据——使用聚合函数 (11)<8>分组数据 (14)<9>使用子查询 (15)<10>联结表 (16)<11>创建高级联结 (18)<12>组合查询 (20)<13>插入数据 (22)<14>更新和删除数据 (25)<15>创建和操纵表 (27)<16>使用视图 (29)<17>使用存储过程 (31)<18>管理事务处理 (32)<19>高级SQL特性 (35)<1>了解SQL 1.1 基本概念数据库(DataBase)表(Table)模式(Schema)列(Column)数据类型行(Row)主键满足以下条件的任何列都可以作为主键:1.2 关于SQLSQL扩展<2>检索和排序数据2.1.检索数据使用SELECT 检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
检索不同的值限制结果使用关键字限制返回行数:1. SQL Server、Access——使用TOP关键字2. DB2——使用FETCH FIRST 5(行数) ROWS ONLY3. Oracle——使用ROWNUM(行计数器)4. MySQL、MariaDB、PostgreSQL、SQLite——LIMIT子句注释2.2.排序检索数据ORDER BY 子句指定排序方向提示<3>过滤数据3.1.过滤数据在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE 之后,否则将会产生错误WHERE子句操作符范围值检查3.2. 高级数据过滤组合WHERE子句<4>使用通配符过滤数据4.1.LIKE操作符百分号(%)通配符%表示任何字符出现任意次数:下划线(_)通配符只匹配单个字符,而不是多个字符,下面的示例有两个_通配符:^脱字号<5>创建计算字段5.1. 拼接(concatenate)5.2. 执行算术计算<6>使用数据处理函数与SQL 语句不一样,SQL 函数不是可移植的。
mysql数据库基础知识笔记
MySQL是一种关系型数据库管理系统,它使用结构化查询语言(SQL)来进行数据管理和查询。
以下是MySQL数据库的基础知识笔记:
数据库:一组相关数据的集合。
表:存储在数据库中的数据组织形式。
列:表中的一个字段,定义了该列所存储的数据类型。
行:表中的一条记录,由多个列组成。
主键:唯一标识表中每一行的特定列。
外键:一个表中的列,与另一个表中的主键建立连接关系,用于保证数据完整性和减少数据冗余。
索引:为了提高查询效率而创建的数据结构,可以根据索引快速搜索和查找数据。
关系型数据库:以表格形式存储数据,通过关联不同表之间的主键和外键来建立关系。
非关系型数据库:将数据以文档、键值对或图形等方式存储,适用于分布式、非结构化数据场景。
SQL语句:用于对MySQL数据库进行查询、插入、更新和删除操作的编程语言,包括SELECT、INSERT、UPDATE、DELETE等命令。
数据库入门培训教程Mysql学习笔记(三)对表数据的增删改查
数据库入门培训教程Mysql学习笔记(三)对表数据的增删改查这一部分是最简单的,也是最麻烦的。
简单是因为其实只包括增删该插四个部分。
大体上看,增加数据、删除数据、修改数据、查询数据都不麻烦啊,我们日常都是常用的。
这个谁不会呢以前在培训机构学myql的时候,我就知道,程序员的成长路程上的一个瓶颈就在于数据库。
如何书写高维护性的ql语句,如何能保持高维护性的同时又保持执行的高效率,这是个难题。
我最近在做一个比较棘手的项目,常常leftjoin5~6张表,扫表10几万,查询速度慢的惊人。
10几万还仅仅是测试数据,等真正的项目上线,数据量可能会达到百万级别。
因此低效率的myql语句,可能程序直接就崩溃了。
因此关于数据这部分的增删改插是最难的,也是至关重要的,一定要学好。
但我们今天仅仅书写最简单的增删该插,后面的博客将会持续深入的去整理相关方面的知识。
增加数据:inertinto表名(字段1,字段2,字段3,字段n)value(值1,值2,值3,值4);这个比较简单。
这是一条通用语句。
可以值inet一条数据,也是inert多条数据。
这个在《Myql学习笔记(二)对表结构的增删改查》的测试ql里面有。
可以参考一下,这里就不重复贴代码了。
注意事项:向char、varchar、te某t以及日期型的字段插入时,字段值要用单引号括起来。
向默认值约束字段插入数据时,字段值可以使用default关键字,表示插入的是该字段的默认值。
插入新纪录时,需要注意表之间的外键约束关系,原则上先给父表插入数据,然后给子表插入数据。
删除数据:删除数据是比较危险的操作,平时在开发测试阶段,可能会用到,但是到了真正的项目上线阶段,是不会有delete权限的。
语法:deletefrom表名where条件;deletefromclaewherecla_no=53;(可以继续用《Myql学习笔记(二)对表结构的增删改查》中的测试ql);强调一句,删除数据与修改数据,不加条件都是臭流氓。
mysql基础知识笔记总结
mysql基础知识笔记总结创建数据库在与数据进⾏任何其他操作之前,需要创建⼀个数据库。
数据库是数据的容器。
它可以⽤于存储联系⼈,供应商,客户或任何想存储的数据。
在MySQL中,数据库是⽤于存储和操作诸如表,数据库视图,触发器,存储过程等数据的对象的集合。
要在MySQL中创建数据库,请使⽤CREATE DATABASE语句,如下:CREATE DATABASE [IF NOT EXISTS] database_name;SQL我们来更详细地看看CREATE DATABASE语句:CREATE DATABASE语句的后⾯是要创建的数据库名称。
建议数据库名称尽可能是有意义和具有⼀定的描述性。
IF NOT EXISTS是语句的可选⼦句。
IF NOT EXISTS⼦句可防⽌创建数据库服务器中已存在的新数据库的错误。
不能在MySQL数据库服务器中具有相同名称的数据库。
例如,要创建⼀个名称为mytestdb数据库,可以执⾏CREATE DATABASE语句后接数据库名称:mytestdb,如果当前MySQL服务器中没有数据库:mytestdb,则创建成功,如下所⽰:CREATE DATABASE IF NOT EXISTS mytestdb;SQL执⾏此语句后,MySQL返回⼀条消息,通知新数据库是否已成功创建。
显⽰数据库SHOW DATABASES语句显⽰MySQL数据库服务器中的所有数据库。
您可以使⽤SHOW DATABASES语句来查看您要创建的数据库,或者在创建新数据库之前查看数据库服务器上的所有数据库,例如:+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || testdb || yiibaidb |+--------------------+5 rows in set在此MySQL数据库服务器中有6个数据库。
SQL数据库学习笔记与心得
SQL数据库学习笔记与心得作为一种常用的数据库技术,SQL(Structured Query Language)在现代软件开发中扮演着至关重要的角色。
从存储和管理数据到实现数据操作和查询,SQL数据库承载着信息的重要职责。
本文将分享我学习中国SQL数据库的心得和笔记,以期能帮助更多的读者更好地理解和掌握这一技术。
一、SQL语句分类SQL语句一般分为数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)和事务控制语言(TCL)五种类型。
1. 数据定义语言(DDL)数据定义语言用于创建和修改数据库对象,包括创建、删除、修改、重命名表和列等。
其常用的操作包括:CREATE:用于创建表、视图、存储过程等对象。
ALTER:用于修改表结构、重命名对象等。
DROP:用于删除表、视图、存储过程等对象。
2. 数据操作语言(DML)数据操作语言用于对数据库中的数据进行操作,包括增加、修改、删除记录等。
其常用的操作包括:SELECT:用于查询数据。
INSERT:用于向表中插入数据。
UPDATE:用于更新表中记录。
DELETE:用于删除表中记录。
3. 数据查询语言(DQL)数据查询语言用于从数据库中检索数据,其常用的操作为SELECT。
4. 数据控制语言(DCL)数据控制语言用于控制数据库中的数据,包括用户的操作和访问权限等。
其常用的操作包括:GRANT:用于授予用户访问数据库的权限。
REVOKE:用于撤销用户访问数据库的权限。
5. 事务控制语言(TCL)事务控制语言用于控制事务的提交、回滚等操作。
其常用的操作包括:COMMIT:用于将事务中的操作永久地保存到数据库。
ROLLBACK:用于撤销事务中的操作。
二、SQL语句基础1. 数据表操作创建表:CREATE TABLE table_name (column_name data_type);插入数据:INSERT INTO table_name(column_Name1,column_Name2,…) VALUES (value1,value2,…)查询数据:SELECT * FROM table_name;删除表:DROP TABLE table_name;修改表:ALTER TABLE table_name ADD column_namedata_type;2. 数据类型整数类型:INT, SMALLINT, BIGINT。
My_SQL基础知识介绍第一章
本章要点:MySQL标准简介关系数据库系统的知识MySQL的优点MySQL的SQL语言MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。
MySQL在UNIX等操作系统上是免费的,在Windows操作系统上,可免费使用其客户机程序和客户机程序库。
MySQL是一个精巧的SQL数据库管理系统,虽然它不是开放源代码的产品,但在某些情况下你可以自由使用。
由于它的功能强大、使用简便、管理方便、运行速度快、安全可靠性强、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业软件用户的青睐,特别是与Apache和PHP/PERL结合,为建立基于数据库的动态网站提供了强大动力。
1.1 MySQL简介MySQL的进展是非常快了,越来越多的领域里都可以见到MySQL的身影,在学习如何使用这个强大的系统之前,我们首先要了解MySQL的历史、功能、特点,你会对学习MySQL更具信心。
在正式开始之前,我们现了解一下它的读音。
MySQL的官方发音是“My Ess Que Ell”(不是MY-SEQUEL )。
1.1.1 MySQL是什么?MySQL是一个真正的多用户、多线程SQL数据库服务器。
SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。
MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。
例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。
MySQL 主要目标是快速、健壮和易用。
最初是因为我们需要这样一个SQL服务器,它能处理大型数据库,但速度更快。
自1996年以来,我们一直都在使用MySQL,其环境有超过40 个数据库,包含10,000个表,其中500多个表超过7百万行,这大约有100 个吉字节(GB)的关键应用数据。
8000字《SQL必知必会》精华笔记!
8000字《SQL必知必会》精华笔记本篇文章是《SQL 必知必会》的读书笔记,SQL必知必会的英文名叫做Sams Teach Yourself in 10 Minutes。
但是,我肯定是不能够在10分钟就能学会本书所有涉及到的sql,所以就起个名字叫30分钟学会SQL语句。
目前手边的数据库是mysql,所以以下示例均是由mysql 演示。
由于现在大部分工具都支持语法高亮,所以以下关键字都使用小写。
01准备工具mycli,一个使用python编写的终端工具,支持语法高亮,自动补全,多行模式,并且如果你熟悉vi的话,可以使用vi-mode快速移动,编辑。
总之,vi + mycli 简直是神器!同样,postgreSQL 可以使用pgcli。
.pip install -U mycli # 默认你已经安装了pip.样例表示例中有两个表,分为student 学生表与class 班级表。
student 表中有class_id 关联class 表。
以下是两个表数据的sql。
另外,最后有三道小练习题会用到样例表。
create table class( id int(11) not null auto_increment,name varchar(50) not null,primary key(id));create table student( id int(11) not null auto_increment,name varchar(50) not null,age smallint default20,sex enum('male', 'famale'),score tinyint comment'入学成绩',class_id int(11),createTime timestamp default current_timestamp,primary key(id),foreign key(class_id) references class(id));insert into class(name)values('软件工程'), ('市场营销');insert into student (name, age, sex, score, class_id)values('张三', 21, 'male', 100, 1);insert into student (name, age, sex, score, class_id)values('李四', 22, 'male', 98, 1);insert into student (name, age, sex, score, class_id)values('王五', 22, 'male', 99, 1);insert into student (name, age, sex, score, class_id)values('燕七', 21, 'famale', 34, 2);insert into student (name, age, sex, score, class_id)values('林仙儿', 23, 'famale', 78, 2);(提示:可以左右滑动代码)02SQL基础术语D a t a b a s e数据库值一系列有关联数据的集合,而操作和管理这些数据的是DBMS,包括MySQL,PostgreSQL,MongoDB,Oracle,SQLite等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
My SQL学习笔记:一、认识关系型数据库1.数据库实际上就是管理数据的仓库,平常我们使用的一般是利用文件对数据进行保存和管理,doc, xls, jpg等等,只要我们知道的一切能够保存数据的文件,我们都可以认为是一种保存和管理数据的方式。
2.但是对于大批量数据和便于网络操作而言,使用特定的数据库是很有必要的。
3.数据库系统(Database System)=数据(Data)+数据管理系统(Database ManagementSystem)4.通常意义的数据库:至少包含数据和管理数据的工具,我们知道,数据库还需要对外提供接口让其他程序对数据库进行操作。
二、启动My SQL1.启动数据库分为两部分,一部分是服务器,第二部分是客户端连接到服务器。
2.启动服务器:在Windows上安装My SQL后会在Windows服务管理中增加一条记录,可以通过启动services.msc找到MySQL56进行启动。
也可以使用net start <server-name>。
三、My SQL操作分类:针对的操作对象不同,分成不同的语言:1.数据操作(管理)语言DML2.数据定义语言(对保存数据的格式进行定义)DDL3.数据库控制语言(针对数据库软件服务进行操作)DCLDCL控制DDL,DDL限制DML,即对数据库的操作、对表的操作、对数据的操作DML又分为DQL和DML四、数据库操作DCL1.创建数据库:create database <db_name> [options]; (options:字符集、校对规则)2.查询数据库:show databases;3.查看数据库的创建语句:show create database <db_name>;4.删除数据库:drop database <db_name>;5.修改数据库信息:alter database <db_name> <options>;(options:字符集、校对规则),对于数据库的名字,一般不进行修改,可以通过修改数据库文件夹的名字进行修改,也可以新建一个数据库,将数据库内容保存新数据库中五、表操作1.创建表:create table <tb_name> (<col_definition>,…) [options];1)先分析,需要保存的实体数据,拥有哪些属性,需要怎样保存2)列结构:列名、列的数据类型、列的约束2.查看表:1)有那些表:show tables [like ‘pattern’]; 例如show tables like ‘city_%’;(表示已city_开头的所有表)2)某个表的创建信息:show create table <tb_name>;3)查看表结构:desc(describe) <tb_name>;3.删除表:drop table [if exists] <tb_name>;4.修改表:1)修改表名:rename table <tb_name> to <new_tb_name>;rename table student to info_student, teacher to info_teacher;2)修改字段(列)定义:对列的操作都属于alter操作,不过对于增、删、改、重命名来说还有子操作。
增加列:alter table <tb_name> add <col_defination>; 例:alter table stu add stu_score int;删除列:alter table <tb_name> drop <col_name>; 例:alter table stu drop stu_score;修改列:alter table <tb_name> modify <col_name> <col_defination>; 例:alter table stu modify stu_score int(12);重命名列:alter table <tb_name> change <col_name> <col_defination>; 例:alter table stu change stu_score stu_fenshu int;3)修改表选项:alter table <tb_name> <options>; 例:alter table stu character set utf-8;六、数据操作1.创建数据:insert into <tb_name> (<col_list>) values (<value_list>);其中col_list表示要插入的字段列表,value_list表示要插入的相应字段的值,如果没有字段列表,则表示要插入所有的字段。
即:insert into <tb_name> values (value_list);2.查询数据:select col_list from <tb_name> [options];select * from <tb_name> [options];*表示查询所有的字段。
关于options会有很多的操作,是对查询数据的筛选,以后会仔细讨论。
3.删除数据:delete from <tb_name> [options];例:delete from student where score<60;注:虽然语法上可以不使用where进行过滤,不过在删除时需要在逻辑上严格给出条件,否则容易造成数据误操作,导致损失。
如果需要删除所有数据,建议使用where 14.修改数据:update <tb_name> set <col>=<value>,… [options];例:update student set score=88 where score>72;和删除数据一样,修改数据也要严格给出条件。
七、校对规则这一点没有认真学习,以后要回来重新看八、数据类型在My SQL中分为三种类型:数值类型、时间日期类型、字符串类型。
1.数值类型:数值类型分为整型和浮点型,另外还有一种特殊的类型,定点数。
1)整型:tinyint, smallint, mediumint, int, bigint, 分别占用1,2,3,4,8个字节。
可以使用unsigned控制是否有符号,例:age smallint unsigned可以在定义数值类型中限制最小的显示长度,即前导零填充(zerofill),例:_id int(5) zerofill 在My SQL中没有bool类型,语法上不支持,但是实际我们可以使用tinyint(1)来表示2)浮点型:float, double, 分别占用4,8个字节。
实际上,float的有效精度只有6位左右,double的有效精度只有16位左右。
支持控制数值的范围:<type>(M, D)M表示最大的位数,D表示小数点后的位数。
即表示整数位最多为M-D。
例:a float(5, 2) 表示a的范围为-999.99~999.99。
支持科学计数法:例:insert into <tb_name> values (1.66E8);3)定点数:定点数是为了解决浮点数的精度问题,不存在精度缺失的问题,不过在性能上会低于浮点数。
decimal(M, D)M表示最大长度,D表示小数点后位数,如果超出设定的范围,在整数上超出范围,则不能插入,在小数上超出范围,则进行四舍五入插入。
例:一个decimal(5, 2)的数,插入123.456保存的则是123.46,而插入1234.5时,则会报错。
定点数也支持前导零填充、无符号。
2.时间日期类型时间日期类型分为:datetime, timestamp, date, time, year在表现上,datetime和timestamp是一样的,不同的是,datetime存储是使用字符串存储,而timestamp是使用4个字节的整型存储,在范围上,datetime是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’,而timestamp是’1970-01-01 00:00:00’到’2038-01-19 11:14:07’。
datetime和timestamp的标准形式为’YYYY-MM-DD HH:MM:SS’,虽然还可以使用其他方式,但是一律不推荐,虽然在实际上没有’0000-00-00 00:00:00’,但是在My SQL中提供这个值来代替没有值。
date: 可以看成是datetime的一部分,占用3个字节。
范围:’1000-01-01’ ~ ’9999-12-31’time: 可以表示的意义:一天中的时间、时间间隔。
范围:’-838:59:59’ ~ ’838:59:59’year: 占用一个字节。
范围:1901-2155虽然数据库提供了良好的日期时间类型,但是我们时常是站在java程序员的角度,所以经常是使用int类型保存数据。
3.字符串类型My SQL提供的字符串类型很多,但是我们经常会使用char, varchar, text。
char(M): M表示字符串的长度(不可变)。
varchar(M): M表示字符串允许的最大长度。
实际上varchar会额外使用字节来保存字符串的长度,而且M表示的自己的长度,所以在存储utf-8的时候,实际上只能存储一半左右的字符。
text: text是用于字符特别多的情况,具体细节需要查阅文献。
enum: 和Java一样,enum提供了多种选项,而字段的值只能是其中的某一个选项,允许为null,实际应该是使用整数类型保存的。
set: 和enum不同的是,set可以允许有多个选项,也允许为null。
定义enum, set例:hobby enum(‘football’, ‘basketball’) not null4.类型的选择虽然My SQL提供了二进制存储图片、视频都二进制文件,但是我们一般不直接使用数据库存储这些资源,而是存储这些资源的url。
在使用数据库的时候,我们需要考虑表的设计,下面给出了一些在设计表的时候需要考虑的问题:1)尽量精确2)考虑开发语言3)考虑兼容性九、列属性(约束)1.是否为空规定一个字段的值是否可以为null, 默认情况下可以为null。