Como realmente dominar o MySQL?

13

Eu tenho usado o mysql pela mesma quantidade de tempo que tenho usado o PHP. No entanto, me sinto 10x mais confiante em PHP; ou qualquer outra linguagem de programação. Mas eu simplesmente não consigo entender realmente o SQL. Quero dizer, posso selecionar, atualizar, inserir, excluir, ingressar, etc., mas quando se trata de coisas mais complexas, estou perdido. Como escrever uma instrução de seleção mais complicada, como usar índices adequadamente, qual mecanismo usar, etc.

Por alguma razão, eu realmente acho difícil seguir os documentos do mysql, mas os do php são fáceis de seguir.

Estou começando a pensar que talvez meu cérebro esteja conectado apenas de uma maneira que torne a programação um pouco confusa, mas que é sql. Eu não sei. A maioria das pessoas acha que o Regex é tão confuso, mas para mim faz mais sentido científico do que como construir uma instrução sql. Por favor, não me interpretem mal, não estou odiando o SQL, gosto muito, só quero entender melhor.

Qual é a melhor / mais rápida maneira de realmente dominar o MySQL?

Quando digo "mestre", não quero dizer o guru entre os gurus, quero dizer inteligente o suficiente para descobrir a maioria das perguntas que faço sobre SO sem precisar de ajuda.

JD Isaacks
fonte
2
Você está falando sobre SQL ou MySQL, porque eles podem ser coisas muito diferentes. Configurar e administrar a replicação é uma tarefa muito diferente de escrever uma consulta sql complicada. Suspeito que isso também seja uma função do tempo. Você certamente gasta muito mais tempo escrevendo PHP do que SQL, mesmo se você estiver usando-os por 'a mesma quantidade de tempo'.
Steven Evers
@SnOrfus Você tem um bom argumento sobre escrever mais código em PHP. O MySQL é a única linguagem de banco de dados relacional que eu já usei. quando eu disse "SQL", eu estava apenas significando esse tipo de linguagem em geral.
JD Isaacks
Faça coisas que são úteis. Explore os diferentes problemas que você pode encontrar no mundo real. Dessa forma, você o levará a explorar cenários mais complexos que a teoria dos livros didáticos. Teste as coisas no console e veja se você pode obter os resultados desejados sem usar o PHP. Por exemplo, a classe de introdução gratuita ao banco de dados que Stanford lançou possui alguns exercícios interessantes relacionados às redes sociais.
James P.
Muitas pessoas odeiam PHP (por vários motivos, alguns deles muito bons), mas sua documentação é excelente. Uma razão para você achar os documentos PHP mais fáceis de seguir do que os documentos do MySQL não é a natureza das linguagens, mas a natureza da documentação.
TRiG

Respostas:

10

Use-o

A internalização de como os bancos de dados relacionais funcionam é difícil para muitas pessoas - mas é muito valiosa. À medida que você trabalha mais com o SQL, ele entra no seu cérebro. Continue se esforçando.

Quando algo parecer estranho, investigue

No Chrome, configurei esse mecanismo de pesquisa, então tudo o que preciso fazer é digitar "m [consulta de pesquisa]" para pesquisar os documentos (a pesquisa do dev.mysql.com é uma porcaria): {google: baseURL} search? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s

Se os documentos não tiverem uma resposta, entre no #mysql no freenode e veja se alguém pode fornecer algumas dicas.

Ler!

Depois de entender como os bancos de dados relacionais funcionam, você precisará saber um pouco mais sobre o que o MySQL está fazendo com as consultas mágicas que você está escrevendo. Eu recomendo o MySQL de alto desempenho - vale muito a pena.

TehShrike
fonte
1
Bem, a boa notícia é que eu já tenho o livro que você recomenda, mas ainda não o passou por muito. obrigado! +1 para obter instruções sobre como configurar a pesquisa do Chrome.
JD Isaacks
Eu tenho o livro, mas ainda não o li.
precisa saber é o seguinte
@tehShrike como você fez isso no chrome?
jaybny
@jaybny botão direito do mouse na barra de URL e vá em "Editar motores de busca"
TehShrike
9

Em primeiro lugar, obtenha um entendimento completo das junções. Não apenas as junções interna e esquerda também. Saiba o que uma junção cruzada faz e uma junção externa completa. Conheça as circunstâncias que o levariam a escolher um tipo específico de associação. Entenda que eles não são intercambiáveis ​​e que a consulta que usa uma junção esquerda pode retornar resultados diferentes daquele que usa uma junção interna. (Alguém poderia pensar que isso seria óbvio, mas eu já li muitas perguntas em que as pessoas, ao descreverem o problema, tentam aleatoriamente diferentes associações).

A seguir, realmente entenda os agregados e como eles funcionam. O Mysql permitirá que você se livre de não fazer agrupamentos de maneira padrão. Mas tenha a disciplina para definir completamente o grupo por cláusula corretamente. Isso ajudará você a entender o que está fazendo e tornará seu conhecimento mais facilmente transferível para outros bancos de dados.

Aprenda o que a declaração do caso faz.

Ao fazer consultas complexas, aprenda a trabalhar em partes. Verifique em cada parte que você tem os resultados esperados. Por exemplo, suponha que você precise escrever uma consulta de relatórios sobre pedidos que foram devolvidos nos últimos 3 meses e o motivo da devolução, bem como as informações de contato do cliente. O primeiro passo é obter os pedidos devolvidos nos últimos três meses. Depois de saber que possui esse sólido, você pode adicionar as informações sobre o motivo da devolução. Depois de ter esse sólido, você pode adicionar o cliente que o devolveu. Depois de ter esse sólido, adicione as informações de contato da pessoa. Em cada estágio, verifique seus resultados e veja se eles fazem sentido. Nesse caso, provavelmente quero terminar com apenas um registro por pedido devolvido. Se, em qualquer estágio intermediário, o número de resultados aumentar ou diminuir, você sabe que tem um problema com a consulta. Às vezes, nos blocos de construção, você deseja ver campos adicionais apenas para verificar se as informações estão corretas. Coloco-os em uma linha separada e comento-os à medida que passo na próxima etapa (removendo-os no final quando souber que estou certo), para que fiquem disponíveis para ver novamente com facilidade se adicionar outra ruga tornar a consulta engraçada. Você não pode fazer consultas complexas corretamente sem entender completamente como devem ser os resultados. Pensar que parece bom porque retornou alguns resultados quase garantirá que você tenha resultados errados uma boa parte do tempo. m à direita), para que fiquem disponíveis para visualização fácil novamente, se a adição de outra ruga tiver tornado a consulta engraçada. Você não pode fazer consultas complexas corretamente sem entender completamente como devem ser os resultados. Pensar que parece bom porque retornou alguns resultados quase garantirá que você tenha resultados errados uma boa parte do tempo. m à direita), para que fiquem disponíveis para visualização fácil novamente, se a adição de outra ruga tiver tornado a consulta engraçada. Você não pode fazer consultas complexas corretamente sem entender completamente como devem ser os resultados. Pensar que parece bom porque retornou alguns resultados quase garantirá que você tenha resultados errados uma boa parte do tempo.

Aqui está uma lista de algumas coisas básicas que você deve poder fazer no SQL sem precisar pensar nisso:

  1. Primeiro, uma seleção direta sem junções (e sem seleção *), mas com condições na seleção
  2. Você deve saber como combinar duas ou mais tabelas e obter registros que estão em todas as tabelas
  3. Você deve saber como combinar duas ou mais tabelas e obter registros que estão em todas as tabelas, mas retornar apenas um registro da tabela com o lado muitos do relacionamento um para muitos
  4. Você deve conseguir obter os registros em uma tabela, mas não em uma tabela associada
  5. Você deve poder agregar dados para um relatório
  6. Você deve poder inserir um registro em uma tabela
  7. Você deve poder atualizar um registro em uma tabela
  8. Você deve poder excluir um registro em uma tabela
  9. Você deve poder inserir um grupo de registros em uma tabela sem um cursor
  10. Você deve poder atualizar um grupo de registros em uma tabela sem um cursor
  11. Você deve poder excluir um grupo de registros em uma tabela sem um cursor
  12. Você deve poder executar várias ações em uma transação e lidar com a interceptação de erros
  13. Você deve ser capaz de criar união de registros e saber quando usar o UNION vice UNION ALL
  14. Você deve poder variar os dados para um campo com base em alguns critérios (usando CASE)

Depois de se sentir confortável com seu conhecimento básico de SQL, conheça a estrutura do banco de dados. Posso escrever consultas complexas em relação aos dbs muito complicados que dou suporte muito mais rápido que outras pessoas, porque entendo a estrutura e não preciso pensar em onde as coisas estão armazenadas. Se você entender a estrutura da tabela e os relacionamentos de chave estrangeira e onde os valores de pesquisa são armazenados e o que as colunas significam (não apenas o nome, mas quais dados são mantidos nelas), você pode ser especialista em consultar esse banco de dados. A primeira coisa que faço em qualquer novo trabalho é entender completamente a estrutura do banco de dados.

HLGEM
fonte
3

Na minha opinião, para aprender SQL (e isso é realmente o que você está perguntando, os detalhes específicos do MySQL podem vir mais tarde), você deve se remover do fluxo de controle da programação no estilo PHP. Pense especificamente no paradigma das linguagens declarativas:

SQL define o que você deseja, não como fazê-lo. Se você pode tentar remover mentalmente o último, o primeiro seguirá a tempo. Abstraia essa camada em sua mente e deixe o MySQL (ou Oracle ou o que seja) se preocupar com como .

A lógica do aplicativo pode ocorrer no SQL versus código OO / procedural no PHP. Por exemplo, ao fazer consultas ao banco de dados para alguma coisa, você pode ingressar consistentemente em uma tabela de usuários e talvez uma tabela de permissões para garantir os direitos adequados, em vez de fazer várias pré-consultas. A inserção pode ser feita através de uma seleção semelhante ( insert into ... select ...) em vez de valores nomeados para garantir a validação dos dados.

De qualquer forma, recomendo enfatizar as primitivas do Codd e entender a seleção, projeção, união, união e diferença. No final do dia, os conceitos são diretos e você provavelmente pode realizar 80% do que deseja fazer através deles. O resto pode seguir.

Jé Queue
fonte
+1 para um ótimo conselho do segundo parágrafo e nunca pensei nisso dessa maneira!
JD Isaacks
2

A maneira mais rápida que encontrei para "dominar" qualquer coisa foi me desafiar com isso. Pegue um conjunto de dados e anote de oito a dez coisas diferentes que você gostaria de consultar. Um grupo de alunos em que você pode encontrar a idade média de todos os agrupados pela média da nota arredondada para o número inteiro mais próximo. Em seguida, escreva as consultas para eles. Comece com uma tabela e adicione mais. Pratique junções de dados e funções internas.

Josh K
fonte