[Música tocando] DOUG LLOYD: Em nossos vídeos sobre temas de desenvolvimento web, nós mencionamos o conceito de um banco de dados algumas vezes, certo? Então você é um banco de dados provavelmente está familiarizado com a partir de dizer usando o Microsoft Excel ou planilhas do Google. É realmente apenas uma organizada conjunto de tabelas, linhas e colunas. E um banco de dados é onde nossas lojas site informação que é importante para o nosso site para funcionar corretamente. Mais uma vez, um exemplo muito comum aqui está armazenando usernames e senhas numa base de dados, de modo que quando um usuário se conecta nosso site, o banco de dados pode ser consultado para ver se o usuário existe no banco de dados. E se eles são, verificando que sua senha está correta. E se a sua senha está correta, então nós podemos dar-lhes qualquer página eles estão pedindo. Então, provavelmente você está, mais uma vez, familiarizado com esta ideia do Excel ou Google Spreadsheets. Temos bancos de dados, tabelas, linhas e colunas. E isso é realmente sorte do conjunto fundamental de desagregação hierárquica aqui. Então aqui está uma planilha do Excel. E se você já abriu este ou outro programa semelhante você sabe que estes são aqui rows-- 1, 2, 3, 4, 5, 6, 7. Estes são colunas. Talvez aqui, embora você possa não usar esse recurso terrivelmente much-- Vou aumentar em-- temos essa idéia de uma folha. Então, talvez estas folhas, se Eu alternar frente e para trás, são diferentes tabelas que existe no meu banco de dados. E se continuarmos a exemplo tudo A propósito, o nome deste banco de dados é um livro. Talvez eu tenha Livro 2 e 3 do livro. Então, cada arquivo de Excel é uma banco de dados, cada folha é uma tabela, e dentro de cada tabela eu tenho essa idéia de linhas e colunas. Então, como posso trabalhar com esta base de dados? Como faço para obter informações a partir dele? Bem, há uma linguagem chamada SQL-- que eu normalmente apenas chamar Sequel-- e que defende o Structured Query Language. E é uma linguagem de programação, mas é uma programação bastante limitado idioma. Não é bem como outros que temos trabalhado com. Mas o objectivo da presente linguagem de programação é consultar um banco de dados, a pedir informações de um banco de dados, encontrar informações em um base de dados, e assim por diante. Nós também, em CS50-- e é uma muito plataforma comum, ele é chamado MySQL. Isso é o que nós usamos no curso. É uma fonte aberta plataforma que estabelece um chamado database-- relacional um banco de dados, de forma eficaz. Nós não precisamos de obter em muitos detalhes sobre o que um banco de dados relacional é. Mas a linguagem SQL é muito apto para trabalhar com MySQL e outros semelhantes estilos de bancos de dados relacionais. E muitas instalações de MySQL vêm com algo chamada phpMyAdmin, que é uma gráfica de usuário interface-- um GUI-- que faz com que seja um pouco mais user friendly para executar consultas de banco de dados, porque os bancos de dados não são usados ​​apenas por programadores avançados, certo? Às vezes, há estas pequenas empresas, e eles não podem dar ao luxo de contratar uma equipe de programadores, mas eles ainda precisam de armazenar informação numa base de dados. Algo como phpMyAdmin faz com que seja muito fácil para alguém que nunca programado antes de pegar e se familiarizar com a forma como a trabalhar com um banco de dados. O problema é, phpMyAdmin, enquanto é uma ferramenta fantástica para a aprendizagem sobre bancos de dados, é manual. Você vai ter que fazer login no -lo e executar comandos e tipo coisas manualmente. E como nós sabemos de nossa exemplo em programação web PHP, ter que fazer manualmente coisas em nosso site, se queremos dinâmico, um responsiva ativa site, talvez não seja a melhor abordagem. Gostaríamos de encontrar uma maneira de talvez automatizar isso de alguma forma. E SQL nos permitirá fazer isso. Então, quando nós vamos começar a trabalhar com SQL, precisamos primeiro ter uma banco de dados com que trabalhar. Criação de um banco de dados é algo que você provavelmente vai fazer no phpMyAdmin, porque você só precisa fazer isso uma vez, e a sintaxe para fazer isso é muito mais simples. É muito mais fácil de fazê-lo em uma interface gráfica de usuário que digitá-lo fora como um comando. O comando pode ficar um pouco complicado. Da mesma forma, a criação de uma tabela pode obter um pouco complicado também. E assim as coisas como a criação de um banco de dados e criação de uma tabela, que você é provavelmente só vai fazer once-- uma vez por tabela, uma vez por database-- não há problema em fazer isso em uma interface gráfica. No processo de criação de uma tabela, você vai também tem que especificar todos os colunas que estarão nessa tabela. Que tipo de informação fazer você deseja armazenar na tabela? Talvez um nome de usuário e data de nascimento, senha, número de ID do usuário, e talvez cidade e estado, certo? E para cada vez que quiser adicionar um usuário ao banco de dados, queremos obter todos os seis dessas peças de informação. E fazemos isso adicionando linhas ao quadro. Então primeiro criamos um banco de dados, então nós criamos uma tabela. Como parte da criação uma mesa, somos convidados para especificar cada coluna que gostaríamos nesta tabela. E então quando começamos a adicionar informação para a base de dados e consultar o banco de dados mais generally-- não apenas acrescentando: mas tudo o resto nós fazer-- estaremos lidando com linhas da tabela, que é um informações do usuário a partir de todo o conjunto. Assim, cada coluna SQL é capaz de a exploração dos dados de um determinado tipo de dados. Então nós meio que eliminou este idéia de tipos de dados em PHP, mas eles estão de volta aqui em SQL. E há um monte de tipos de dados. Aqui é apenas 20 deles, mas não é mesmo todos eles. Portanto, temos idéias como INTs-- Integers-- nós provavelmente sabe que esta coluna pode conter números inteiros. E existem variações thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Talvez nem sempre precisa de quatro mordidas. Talvez precisemos de oito bytes, e por isso, pode usar essas variações em números inteiros para ser um pouco mais eficiente do espaço. Nós podemos fazer números decimais, nós pode fazer números de ponto flutuante. Estes são bastante semelhantes. Existem algumas diferenças, e se você faria gostaria de procurar o Tipo SQL de guia, você pode ver o que o ligeiro diferenças entre eles. Talvez a gente quer armazenar informações sobre data e hora. Talvez nós estamos mantendo o controle de quando o usuário se juntou ao nosso site, e talvez por isso que queremos para ter uma coluna que é um tempo de data ou um timestamp que indica quando o utilizador realmente se inscreveram. Podemos fazer geometrias e cadeias de linhas. Este é realmente muito legal. Poderíamos traçar um área geográfica através GIS coordenadas para traçar uma área. Então, realmente pode armazenar esse tipo de informações numa coluna SQL. TEXT é apenas blobs gigantes de texto, talvez. Enums são uma espécie de interessante. Eles realmente existem em C. Nós não fazer falar sobre eles porque eles não são terrivelmente comumente utilizado, pelo menos, CS50. Mas é um tipo de dados enumerado, que é capaz de manter valores limitados. Um bom exemplo aqui seria para criar um enum onde o sete valores possíveis são domingo, segunda-feira, Terça-feira, quarta-feira, quinta-feira, sexta-feira, Sábado, certo? Que tipo de dados de Day Semana não existe, mas poderíamos criar uma tipo de dados enumerado como que essa coluna só pode prender sempre uma dessas sete valores possíveis. Temos enumerou tudo dos valores possíveis. Então nós temos CHAR e VARCHAR, e eu tenho colorir estas verde porque nós somos realmente vai levar um segundo para falar sobre a diferença entre estas duas coisas. Assim, CHAR, ao contrário do C, onde CHAR foi um único personagem, em SQL CHAR refere-se a um uma cadeia de comprimento fixo. E quando nós criar esta coluna, nós, na verdade, pode especificar o comprimento da corda. Assim, neste exemplo, poderíamos dizer CHAR (10). Isso significa que todo elemento de coluna consistirá de 10 bytes de informação. Nem mais nem menos. Então, se nós tentamos e colocar em um 15 bit ou um elemento de 15 caracteres ou valor para esta coluna, nós estamos só obter os 10 primeiros. Se colocarmos em dois caráter valor longo, nós vamos ter os dois caracteres e, em seguida oito mordidas nulos. Nós nunca vamos ser mais eficiente do que isso. Um VARCHAR é tipo como nossa noção de uma string que estamos familiarizados com de C ou de PHP. É uma cadeia de comprimento variável. E quando você cria Nesta coluna, você só especificar os comprimentos máximos possíveis. Então, talvez 99, ou comumente 255. Isso seria o comprimento máximo. E por isso, se nós estávamos armazenando 15 cadeia de caracteres, usaríamos 15 bytes, talvez 16 bytes para o terminador nulo. Se estivéssemos armazenar uma três cadeia de caracteres, usaríamos três ou quatro bytes. Mas nós não usaria a completa 99. Então, por que temos tanto? Bem, se nós precisamos descobrir como tempo alguma coisa é com um VARCHAR, temos que tipo de iterate através dele, tal como fizemos em C e descobrir onde ele pára. Considerando que, se sabemos que tudo nesta coluna é de 10 bytes, talvez nós sabemos que a informação, podemos saltar 10 bytes, 10 bytes, 10 bytes, 10 bytes, e sempre encontrar o início da cadeia. Assim, podemos ter algum espaço desperdiçado com um CHAR, mas talvez haja um comércio off de ter uma melhor velocidade a navegar no banco de dados. Mas talvez nós queremos o flexibilidade de um VARCHAR Se em vez de having-- nosso CHAR foi de 255, mas a maioria de nossos usuários só se introduzir três ou quatro bytes vale de informações ou três ou quatro caracteres no valor de informação. Mas alguns usuários estavam usando toda a 255, talvez VARCHAR seria mais apropriado lá. É uma espécie de um trade-off, e em geral, para fins de CS50, você não precisa se preocupar muito sobre se você usar um CHAR ou VARCHAR. Mas no mundo real, essas coisas não importa, porque todas essas colunas ocupam espaço físico real. E espaço físico, na mundo real, vem em um prêmio. Então, uma outra consideração quando você está construindo uma mesa é escolher uma coluna para ser que é chamado de chave primária. E uma chave primária é uma coluna onde cada valor único é único. E isso significa que você pode facilmente escolher uma única linha, só de olhar na chave primária dessa linha. Assim, por exemplo, você geralmente, com os usuários, Não quero que dois usuários têm o mesmo número de ID do usuário. E talvez por isso você tem muita informação, e talvez dois usuários podem tem o mesmo nome-- você tem John Smith e John Smith. Isso não é necessariamente um problema, porque há várias pessoas no mundo chamado John Smith. Mas só temos um número de identificação do usuário 10, um usuário ID número 11, 12, 13. Não temos dois usuários com o mesmo número, e talvez por isso os números de ID do usuário seria uma boa chave primária. Não temos qualquer duplicação, e podemos agora unicamente identificar cada única linha apenas olhando para essa coluna. Escolhendo as chaves primárias pode realmente fazer operações de tabela subsequentes muito mais fácil porque você pode aproveitar o fato de que certas linhas serão ser único, ou uma determinada coluna de seu banco de dados ou tabela será exclusivo para escolher linhas particulares para fora. Você também pode ter um primário conjunta chave, que você pode achar ocasião de usar, que é apenas um combinação de duas colunas que é garantida para ser exclusivo. Então, talvez você tem um coluna que é como e Bs, uma coluna que é um, dois, e três, mas você vai sempre apenas tem um único A1, uma única A2, e assim por diante e assim por diante. Mas você pode ter um B2, um C2, ou uma A1, A2, A3, A4. Assim, você poderá ter vários Como, múltiplos Bs, os múltiplos, múltiplos pares, mas você só pode sempre ter um único A1, B2, C3, e assim por diante. Então, como eu disse, é um SQL linguagem de programação, mas tem um vocabulário bastante limitado. Ele não é tão expansivo como C e PHP e outras linguagens que falamos no curso. É um mais detalhado língua do que o que nós somos vai falar neste vídeo, porque neste vídeo vamos falar sobre quatro operações que nós pode executar em uma tabela. Existem mais do que isso. Nós podemos fazer mais do que isso, mas para os nossos propósitos, nós estamos geralmente vai estar usando apenas quatro inserção operations--, selecionar, atualizar e excluir. E você provavelmente pode adivinhar intuitivamente o que todos os quatro destas coisas fazem. Mas nós vamos entrar em um pouco de detalhe em cada um. Assim, para efeitos da presente vídeo, vamos supor temos o seguinte dois tabelas em um único banco de dados. Nós temos uma tabela chamada Usuários que tem quatro columns-- número de identificação, nome de usuário, senha e nome completo. E nós temos uma segunda tabela no mesmo banco de dados chamado Moms que apenas armazena informações sobre um nome de usuário e uma mãe. Assim, para todos os exemplos Neste vídeo, nós vamos estar usando esse banco de dados e atualizações posteriores. Então, vamos dizer que queremos adicionar informações a uma mesa. Isso é o que faz a operação de inserção. Ao explicar todos estes comandos, eu vou para dar-lhe um esqueleto geral de usar. Porque, basicamente, as consultas vai olhar bastante semelhante, nós apenas estamos indo para estar mudando ligeiramente diferentes peças de informação para fazer coisas diferentes com a tabela. Assim, por INSERT, o esqueleto olha o tipo de como este. Queremos inserir em uma tabela específica. Então nós temos um parêntese de abertura e uma lista de colunas que queremos colocar valores em. Fechar parênteses, o seguintes valores e, em seguida, novamente, listamos os valores queremos colocar em cima da mesa. Portanto, um exemplo do presente seria a seguinte. Eu quero inserir na tabela usuários a seguinte columns-- nome de usuário, senha e nome completo. Assim, uma nova linha onde eu estou colocando naqueles três colunas e estamos vai colocar nos valores Newman, USMAIL, e Newman. Portanto, neste caso, eu sou colocando a Newman minúsculas na coluna de nome de usuário, a senha USMAIL, bem como a plena capital de nome N Newman na coluna de nome completo. Então aqui está o que o banco de dados parecia antes. Aqui está o que a tabela de usuários no top parecia antes que fizemos isso. Depois de se executar este consulta, nós começamos isso. Nós adicionamos uma nova linha à tabela. Mas note uma coisa que eu não especificou, mas de alguma forma eu tenho um valor para, o que é este 12 aqui. Eu não disse que eu queria número de identificação colocar lá dentro. Eu queria colocar nome de usuário, senha, nome completo. E eu fiz isso, tudo bem. Mas eu também tenho esse 12. Por que eu recebo este 12? Bem, acontece que quando você está definindo uma coluna que vai ser o seu chave primária, que é normalmente, como eu disse, um número de identificação. Não é sempre, necessariamente, vai ser um número de identificação, mas normalmente é uma boa idéia ser algum tipo de valor inteiro. Você tem uma opção em phpMyAdmin quando você está criando o banco de dados ou sua mesa para definir que coluna como auto incrementado. Que é realmente uma boa idéia quando você está trabalhando com uma chave primária, porque você quer todos os valores nessa coluna para ser exclusivo. E se você esquecer de especificar -lo por mais de uma pessoa, agora você tem uma situação em que coluna que não é único. Você tem dois espaços em branco, para que você não pode já o identificar um column-- ou você já não pode unicamente identificar uma linha com base nessa coluna. Ele perdeu toda a sua valor como uma chave primária. E assim, aparentemente, o que eu fiz aqui está configurado o ID do usuário coluna de auto incremento para que cada vez que eu adicionar informações para a mesa, ele vai me dar automaticamente um valor para a chave primária. Então, eu nunca posso esquecer de fazê-lo porque o banco de dados vai fazer isso por mim. Então, isso é bem legal. E é por isso que nós temos 12 em lá, porque eu tenho definir essa coluna até incremento automático. Se eu acrescentei outra pessoa que seria 13, se eu adicionei outra pessoa seria 14, e assim por diante. Então vamos fazer mais uma inserção. Nós vamos inserir na tabela de mães, em particular, o nome de usuário e sua mãe coluna, os valores Kramer e Babs Kramer. E então tivemos isso antes. Depois que nós executamos Consulta SQL, nós temos isso. Nós adicionamos Kramer e Babs Kramer à mesa de mães. Assim que é a inserção. SELECIONAR é o que usamos para extrair informações da tabela. Então é assim que chegarmos informações do banco de dados. E é só selecionar comandos vão ser muito frequentemente usada na programação. O general framework-- o esqueleto geral se parece com isso. Selecione um conjunto de colunas de uma mesa, e em seguida, facultativamente você pode especificar um ou condition-- o que nós normalmente chamamos um predicado, geralmente é o termo que usamos em SQL. Mas é basicamente o que particulares linhas que você deseja obter. Se você quiser, em vez de começar tudo, reduzi-lo, isto é onde você faria isso. E, em seguida, opcionalmente, você também pode ordenar por uma coluna específica. Então, talvez você quer ter coisas classificados alfabeticamente com base em uma coluna ou por ordem alfabética com base em outro. Mais uma vez, WHERE e ORDER BY são opcionais. Mas eles provavelmente vai ser useful-- particularmente ONDE será útil para diminuir para que você não obter todo o seu banco de dados back e tem que processá-lo, você começa apenas as partes dele que você se preocupa. Assim, por exemplo, eu poderia querer seleccionar Número de identificação e nome completo dos usuários. Então, o que pode esta aparência? Então aqui está a minha tabela de usuários. Eu quero selecionar idnum e fullname dos usuários. O que é que eu vou conseguir? Eu estou indo para obter este. Eu não reduzi-lo, então eu sou obter o número de identificação para cada linha e eu estou começando a plena nome de cada linha. ESTÁ BEM. E se eu quiser selecionar senha dos usuários WHERE-- agora Eu estou adicionando uma condição, uma predicate-- onde idnum é inferior a 12. Então aqui está o meu banco de dados novamente, minha tabela de usuários do topo. O que é que eu vou conseguir, se eu quiser selecione essa informação, a senha, onde ID do usuário ou idnum é inferior a 12? Eu estou indo para obter esta informações de volta, certo? Acontece que idnum é de 10, menos de 12, número de identificação de 11 a menos de 12. Eu estou começando a senha para as linhas. Isso é o que eu pedi. Que tal isso? E se eu quiser selecionar estrela do moms mesa onde nome de usuário é igual a Jerry? OK, selecione estrelas é o especial espécie de curinga chamada que usamos para obter tudo. Então, eles estão dizendo selecione nome de usuário mãe vírgula, que passou a ser a única duas colunas desta tabela, Eu só posso selecionar estrela e começar tudo onde o nome de usuário é igual a Jerry. E é isso que eu iria ficar se eu fiz essa consulta particular. Agora, os bancos de dados são grandes porque permitem que nos a organizar a informação, talvez, um pouco mais eficientemente do que talvez de outra forma. Nós não necessariamente para armazenar cada pedaço de informação relevante sobre um usuário na mesma tabela. Tivemos duas mesas de lá. Precisamos armazenar nome da mãe de todo mundo, e talvez nós não temos segurança social número, temos a sua data de nascimento. Isso nem sempre precisa estar na mesma tabela. Enquanto podemos definir relações entre o tables-- e é aí que relacional termo banco de dados tipo de vem em play-- enquanto podemos definir relações entre as tabelas, podemos tipo de compartimentar ou coisas abstratas um caminho; onde só temos a informação realmente importante nos preocupamos em tabela do usuário. E então nós temos informações auxiliares ou informação extra em outras tabelas que podemos ligar de volta para o principal tabela de usuários de uma forma particular. Então aqui nós temos essas duas tabelas, mas há uma relação entre eles, certo? Parece nome de usuário pode ser algo que existe em comum entre estas duas mesas diferentes. Assim que se nós temos agora uma situação onde deseja obter o nome completo de um usuário a partir de mesa do usuário, e sua mãe de nome da tabela mãe? Não temos uma maneira de obter que tal como está, certo? Não há uma única tabela que contém tanto nome completo e nome da mãe. Nós não temos essa opção do que temos visto até agora. E assim temos de introduzir a idéia de um JOIN. E junta-se são, provavelmente, o mais complex-- é realmente mais complexa operação vamos falar sobre no vídeo. Eles são um pouco complicado, mas quando você pegar o jeito dele, eles realmente não está muito ruim. É apenas um caso especial de um SELECT. Nós estamos indo para selecionar um conjunto de colunas de uma tabela de união em uma segunda tabela em algum predicado. Neste caso, pense nisso como isto-- mesa é um círculo aqui, mesa dois é um outro círculo aqui. E essa parte predicado no meio, é tipo de como se pensa sobre como um diagrama de Venn, o que que eles têm em comum? Nós queremos vincular essas duas tabelas com base no que eles têm em comum e criar essa tabela hipotética que é a fusão dos dois juntos. Então, vamos ver isso em um exemplo e talvez isso vai ajudá- esclarecê-lo um pouco. Então, talvez você deseja selecionar user.fullname e moms.mother dos utilizadores no que unem mesa mães em todas as situações onde a coluna nome de usuário é o mesmo entre eles. E este é um novo sintaxe aqui, esse usuário. e mães .. Se eu estou fazendo várias tabelas juntos, posso especificar uma tabela. Eu posso distinguir, em particular, que em na parte inferior lá. Eu posso distinguir o nome de usuário coluna da tabela de usuários da coluna de nome de usuário do moms tabela, que são otherwise-- se nós apenas dissemos nome de usuário é igual a username, que realmente não quer dizer nada. Queremos fazê-lo onde eles combinam. Então eu posso especificar a tabela ea nome da coluna, no caso de uma situação onde seria incerto o que eu estou falando. Então, isso é tudo que eu estou fazendo não é que eu sou dizendo que esta coluna desta tabela, e sendo muito explícito. Então, novamente, eu estou selecionando o nome completo e nome da mãe a partir da tabela de utilizadores ligados em conjunto com o quadro de mães em todas as situações onde eles compartilham que column-- eles compartilham essa noção nome de usuário. Então, aqui estão as tabelas que tínhamos antes. Este é o estado da nossa banco de dados, tal como existe agora. A informação que nós estamos extraindo é esta a começar. Esta é a nova tabela que vamos para criar combinando estes juntos. E note que não estamos destacando Linha de Newman na tabela do usuário, e não estamos destacando Linha de Kramer na tabela de mães porque nem um existe em tanto sets-- em ambas as tabelas. A única informação que é em comum entre eles é Jerry é em ambas as tabelas e gcostanza é em ambas as tabelas. E assim, quando nós fazemos o SQL JOIN, o que get-- e estamos fazendo realmente conseguir isso. É uma espécie de uma variável temporária. É como uma hipotética fusão das duas tabelas. Nós realmente obter algo como este, onde Nós fundiu em conjunto as tabelas no informações que eles têm em comum. Então, observe que users.username e coluna moms.username, é exatamente o mesmo. Essa foi a informação que foi consistente dos usuários mesa e mesa de mães. E, assim, se fundiu-los juntos. Foram descartados Kramer porque ele não existe na tabela de usuários, e descartado Newman, porque ele não existir na tabela de mães. Portanto, esta é a fusão hipotética usando a operação JOIN de SELECT. E então nós estávamos olhando para o nome completo do usuário e da mãe do usuário, e por isso esta é a informação que obteríamos a partir da consulta geral que fizemos com SELECT. Por isso, juntou as tabelas juntos e extraiu-se estas duas colunas, e é isso que nós iria ficar. Mas SQL se junta a uma espécie de complicado. Você provavelmente não vai fazê-las muito, mas apenas ter alguma idéia do esqueleto que você pode usar para mesclar dois mesas em conjunto, se você precisasse. Os dois últimos são uma pouco mais simples eu prometo. Então atualização, podemos usar o UPDATE para alterar as informações em uma tabela. O formato geral é atualizar alguns tabela, definir algumas coluna para algum valor ONDE algum predicado é satisfeita. Assim, por exemplo, podemos querer para atualizar a tabela de usuários e definir a senha para yada yada, onde o número de identificação é 10. Portanto, neste caso, estamos atualizando a tabela de usuários. O número de identificação é de 10 para que existem primeira linha, e nós queremos atualizar o yada yada senha para. E é isso que iria acontecer. É bastante simples, certo? É apenas uma forma muito simples modificação para a mesa. APAGAR é a operação que costumávamos remover a informação a partir de uma tabela. DELETE FROM tabela WHERE algum predicado é satisfeita. Queremos excluir da tabela de usuários, por exemplo, onde o nome de usuário é Newman. Você provavelmente pode adivinhar o que vai acontecer aqui depois de executar esse SQL consulta, Newman está desaparecido desde a mesa. Então, todas essas operações, como eu já disse, são muito fáceis de fazer em phpMyAdmin. É uma interface muito amigável. Mas exige esforço manual. Nós não queremos empregar esforço manual. Queremos que os nossos programas para fazer isso por nós, certo? Então, nós pode querer fazer isso programaticamente. Queremos incorporar SQL e ter outra coisa para fazer isso por nós. Mas o que temos visto que permite nos a fazer algo por meio de programação? Nós vimos PHP, certo? Ele apresenta alguns dinamismo em nossos programas. E assim, felizmente, SQL e PHP jogar muito bem juntos. Há uma função em PHP chamado de consulta, que pode ser usado. E você pode passar como o parâmetro ou o argumento para consultar uma consulta SQL que você gostaria de executar. E PHP irá fazê-lo em seu nome. Então, depois de ter ligado para seu banco de dados com PHP, há duas primárias você fazer isso. Há algo chamado MySQLi e algo chamado DOP. Não vamos entrar em uma enorme quantidade detalhe lá. Em CS50 usamos DOP. Depois de ter ligado para o seu banco de dados, pode, então, fazer consultas seu banco de dados passando as consultas como argumentos para funções PHP. E quando você faz isso, você armazenar o conjunto de resultados em uma matriz associativa. E nós sabemos como trabalhar com arrays associativos em PHP. Então, eu poderia dizer algo como isto-- $ resultados-- esta é igual em PHP-- consulta. E, em seguida, no interior da função de consulta que o argumento que eu estou passando para consulta que se parece com SQL. E, de fato, que é SQL. Essa é a seqüência de consulta que eu faria deseja executar no meu banco de dados. E assim, em vermelho, este é PHP. Esta é SQL que eu sou integração com o PHP, fazendo que o argumento para a função de consulta. Eu quero selecionar fullname de onde os usuários número de identificação é igual a 10. E então talvez depois de eu ter feito isso, Eu poderia dizer algo como isso. Eu quero imprimir o Graças mensagem para efetuar login. E eu quero que interpolate-- Eu quero interpolar $ fullname resultados. E então é assim que eu trabalho com isso matriz associativa que eu voltasse. $ fullname faria resultados basicamente acabar imprimindo, obrigado por login, Jerry Seinfeld. Esse era o nome completo onde idnum é igual a 10. E então tudo que eu estou fazendo é que eu estou agora- I armazenado minha consulta, os resultados de minha pesquisa e resulta em uma matriz associativa, e fullname é o nome do a coluna que eu estava ficando para. Então essa é a minha chave para os resultados matriz associativa que eu quero. Assim Obrigado por login, $ resultados, fullname irá imprimir, vai ficar mesmo entre aqueles encaracolado cintas, Jerry Seinfeld. E eu vou gostar de imprimir a mensagem Obrigado por fazer o login Jerry Seinfeld. Agora, nós provavelmente não quer para o disco coisas como essa no código, certo? Podemos querer fazer algo parecido com impressão f, onde podemos substituir e talvez coletar informações diferentes, ou talvez ter o processo de consulta informações diferentes. E assim por consulta, a função de consulta tem essa noção de espécie de substituições muito semelhantes para imprimir f por cento s e c por cento, é pontos de interrogação. E podemos usar questão marcas muito analogamente para imprimir f para variáveis ​​de substituição. Então, talvez o seu usuário logado anteriormente, e guardou o seu número de ID de usuário em $ _SESSION de PHP super- global na chave ID. Então, talvez depois de logado, você definir $ _SESSION ID é igual a 10, Extrapolando a partir do exemplo que acabamos de ver um segundo atrás. E assim, quando nós realmente executar Esta consulta os resultados agora, ele iria ligar 10, ou o que quer o valor de ID $ _SESSION é. E assim que nos permite ser um pouco mais dinâmico. Nós não estamos difícil codificação coisas mais. Estamos salvando informações em algum lugar e, em seguida, podemos usar essa informação novamente para tipo de generalizar o que queremos fazer, e apenas plug-in e mudança o comportamento de nossa página com base no que ao número de identificação do usuário na verdade, é depois de terem identificado. Também é possível, porém, que os resultados definido pode consistir em várias linhas. Nesse caso, você tem uma matriz de arrays-- uma matriz de matrizes associativas. E você só precisa fazer uma iteração através dela. E nós sabemos como fazer uma iteração através de uma matriz em PHP, certo? Então aqui é provavelmente a mais coisa complexa que temos visto até agora. Ele realmente integra três línguas juntos. Aqui em vermelho, isso é algum HTML. Estou aparentemente este é starting-- um trecho de alguns HTML que eu tenho. Estou começando um novo parágrafo que diz que as mães de Seinfeld de TV. E, em seguida, imediatamente a seguir Estou começando uma mesa. E depois disso, eu ter algum PHP, certo? Eu tenho todo esse código PHP lá. Estou aparentemente, vai fazer uma consulta. E para fazer a consulta, eu vou estar usando mães selecionar a partir de mães. Portanto, este é getting-- este é SQL. Assim, o azul é o SQL. O vermelho vimos um segundo atrás era HTML. E o verde aqui é PHP. Então, eu estou fazendo uma consulta para meu banco de dados, eu sou a seleção de todos os mães na tabela de mães. Não apenas limitando-o a especial seguidos, eu estou pedindo para todos eles. Então eu verificar se o resultado for não é igual a falsa iguais. Esta é apenas a minha maneira de verificar espécie de se os resultados não é igual a nulo, que veríamos c por exemplo. Basicamente, esta é apenas a verificação para fazer Certifique-se de que ele realmente tem dados de volta. Porque eu não quero começar a imprimir out dados se eu não conseguir nenhum dado. Em seguida, para cada uma delas resulta, como resultado do sintaxe foreach do PHP, tudo que eu estou fazendo está imprimindo mães $ resultados. E então eu estou indo para obter um conjunto de todas as mães de each-- é uma matriz de associativo arrays-- e eu estou imprimindo cada um como seu próprio linha de uma tabela. E isso é realmente bonito muito tudo que existe para ela. Eu sei que há um pouco bit acontecendo aqui neste último exemplo com matrizes de arrays-- arrays de arrays associativos. Mas realmente não apenas ferver para baixo em SQL para fazer uma consulta, geralmente selecionando depois de nós já colocar informações na tabela, e depois é só puxá-lo para fora. E isso é que seria retirá- neste caso particular. Gostaríamos de extrair todo do indivíduo mães da tabela moms. Temos todo um conjunto deles, e nós quer para percorrer e imprimir cada um. Então, novamente, este é, provavelmente, o exemplo mais complicado nós vimos porque nós estamos misturando três diferentes idiomas juntos, certo? Novamente, temos aqui HTML em vermelho, misturado com algum SQL aqui no azul, misturado com alguns PHP em verde. Mas todos estes desempenham bem juntos, é apenas uma questão de desenvolvimento bons hábitos de modo que você pode começar los a trabalhar juntos da maneira que quiser. E a única maneira de realmente fazer isso é praticar, praticar, praticar. Eu sou Doug Lloyd, este é CS50.